@keystrokehq/skills 0.0.2 → 0.0.3

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.
@@ -15,13 +15,13 @@ Use this rule:
15
15
  Install the package that exports the operation:
16
16
 
17
17
  ```sh
18
- pnpm add @keystroke/integration-slack
18
+ pnpm add @keystrokehq/slack
19
19
  ```
20
20
 
21
21
  Import the named operation you want:
22
22
 
23
23
  ```ts
24
- import { sendMessage } from '@keystroke/integration-slack/platform/messages';
24
+ import { sendMessage } from '@keystrokehq/slack/platform/messages';
25
25
  ```
26
26
 
27
27
  Call the operation directly from your workflow:
@@ -35,18 +35,18 @@ const result = await sendMessage.run({
35
35
 
36
36
  Replace `sendMessage` with any of the operation exports listed below.
37
37
 
38
- ## `@keystroke/integration-ai`
38
+ ## `@keystrokehq/ai`
39
39
 
40
40
  Install:
41
41
 
42
42
  ```sh
43
- pnpm add @keystroke/integration-ai
43
+ pnpm add @keystrokehq/ai
44
44
  ```
45
45
 
46
46
  Import and use:
47
47
 
48
48
  ```ts
49
- import { generateObject, generateText } from '@keystroke/integration-ai/generate';
49
+ import { generateObject, generateText } from '@keystrokehq/ai/generate';
50
50
 
51
51
  const summary = await generateText.run(/* AI text-generation input */);
52
52
  const structured = await generateObject.run(/* AI object-generation input */);
@@ -60,21 +60,21 @@ Also note:
60
60
  - this package exports AI provider credential sets for agent authoring
61
61
  - this package also exports generation operations, but agent authoring guidance belongs in the agent skill
62
62
 
63
- ## `@keystroke/integration-apollo`
63
+ ## `@keystrokehq/apollo`
64
64
 
65
65
  Install:
66
66
 
67
67
  ```sh
68
- pnpm add @keystroke/integration-apollo
68
+ pnpm add @keystrokehq/apollo
69
69
  ```
70
70
 
71
- Prefer domain subpath imports such as `@keystroke/integration-apollo/accounts` or `@keystroke/integration-apollo/contacts`.
71
+ Prefer domain subpath imports such as `@keystrokehq/apollo/accounts` or `@keystrokehq/apollo/contacts`.
72
72
 
73
73
  Import and use:
74
74
 
75
75
  ```ts
76
- import { createAccount } from '@keystroke/integration-apollo/accounts';
77
- import { searchContacts } from '@keystroke/integration-apollo/contacts';
76
+ import { createAccount } from '@keystrokehq/apollo/accounts';
77
+ import { searchContacts } from '@keystrokehq/apollo/contacts';
78
78
 
79
79
  const account = await createAccount.run(/* Apollo create-account input */);
80
80
  const contacts = await searchContacts.run(/* Apollo search-contacts input */);
@@ -128,20 +128,20 @@ const contacts = await searchContacts.run(/* Apollo search-contacts input */);
128
128
  - `createTasks`: Create Apollo tasks.
129
129
  - `searchTasks`: Search Apollo tasks.
130
130
 
131
- ## `@keystroke/integration-attio`
131
+ ## `@keystrokehq/attio`
132
132
 
133
133
  Install:
134
134
 
135
135
  ```sh
136
- pnpm add @keystroke/integration-attio
136
+ pnpm add @keystrokehq/attio
137
137
  ```
138
138
 
139
- Prefer domain subpath imports such as `@keystroke/integration-attio/records` or `@keystroke/integration-attio/lists`.
139
+ Prefer domain subpath imports such as `@keystrokehq/attio/records` or `@keystrokehq/attio/lists`.
140
140
 
141
141
  Import and use:
142
142
 
143
143
  ```ts
144
- import { createRecord, queryRecords } from '@keystroke/integration-attio/records';
144
+ import { createRecord, queryRecords } from '@keystrokehq/attio/records';
145
145
 
146
146
  const record = await createRecord.run(/* Attio create-record input */);
147
147
  const records = await queryRecords.run(/* Attio query-records input */);
@@ -187,18 +187,18 @@ const records = await queryRecords.run(/* Attio query-records input */);
187
187
  - `listTasks`: List Attio tasks.
188
188
  - `updateTask`: Update an Attio task.
189
189
 
190
- ## `@keystroke/integration-daytona`
190
+ ## `@keystrokehq/daytona`
191
191
 
192
192
  Install:
193
193
 
194
194
  ```sh
195
- pnpm add @keystroke/integration-daytona
195
+ pnpm add @keystrokehq/daytona
196
196
  ```
197
197
 
198
198
  Import example:
199
199
 
200
200
  ```ts
201
- import { DaytonaSandbox } from '@keystroke/integration-daytona';
201
+ import { DaytonaSandbox } from '@keystrokehq/daytona';
202
202
  ```
203
203
 
204
204
  This package does not currently export workflow operations.
@@ -209,21 +209,21 @@ It currently exports sandbox utilities instead:
209
209
  - `DaytonaSandbox`: Create a Daytona-backed sandbox for agents.
210
210
  - `DaytonaSandboxProvider`: Configure the Daytona sandbox provider.
211
211
 
212
- ## `@keystroke/integration-github`
212
+ ## `@keystrokehq/github`
213
213
 
214
214
  Install:
215
215
 
216
216
  ```sh
217
- pnpm add @keystroke/integration-github
217
+ pnpm add @keystrokehq/github
218
218
  ```
219
219
 
220
- Prefer domain subpath imports such as `@keystroke/integration-github/issues`, `@keystroke/integration-github/pull-requests`, or `@keystroke/integration-github/repos`.
220
+ Prefer domain subpath imports such as `@keystrokehq/github/issues`, `@keystrokehq/github/pull-requests`, or `@keystrokehq/github/repos`.
221
221
 
222
222
  Import and use:
223
223
 
224
224
  ```ts
225
- import { getIssue } from '@keystroke/integration-github/issues';
226
- import { listPullRequests } from '@keystroke/integration-github/pull-requests';
225
+ import { getIssue } from '@keystrokehq/github/issues';
226
+ import { listPullRequests } from '@keystrokehq/github/pull-requests';
227
227
 
228
228
  const issue = await getIssue.run({
229
229
  owner: 'keystroke',
@@ -251,22 +251,22 @@ Common operation groups:
251
251
 
252
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
253
 
254
- ## `@keystroke/integration-google`
254
+ ## `@keystrokehq/google`
255
255
 
256
256
  Install:
257
257
 
258
258
  ```sh
259
- pnpm add @keystroke/integration-google
259
+ pnpm add @keystrokehq/google
260
260
  ```
261
261
 
262
- Prefer domain subpath imports such as `@keystroke/integration-google/gmail`, `@keystroke/integration-google/sheets`, or `@keystroke/integration-google/calendar`.
262
+ Prefer domain subpath imports such as `@keystrokehq/google/gmail`, `@keystrokehq/google/sheets`, or `@keystrokehq/google/calendar`.
263
263
 
264
264
  Import and use:
265
265
 
266
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';
267
+ import { listCalendarEvents, createCalendarEvent } from '@keystrokehq/google/calendar';
268
+ import { listEmails, sendEmail } from '@keystrokehq/google/gmail';
269
+ import { createSpreadsheet, writeSpreadsheetRange } from '@keystrokehq/google/sheets';
270
270
 
271
271
  const inbox = await listEmails.run({
272
272
  labelIds: ['INBOX', 'UNREAD'],
@@ -332,23 +332,23 @@ await writeSpreadsheetRange.run({
332
332
 
333
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
334
 
335
- ## `@keystroke/integration-hubspot`
335
+ ## `@keystrokehq/hubspot`
336
336
 
337
337
  Install:
338
338
 
339
339
  ```sh
340
- pnpm add @keystroke/integration-hubspot
340
+ pnpm add @keystrokehq/hubspot
341
341
  ```
342
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`.
343
+ Prefer explicit subpaths such as `@keystrokehq/hubspot/connection`,
344
+ `@keystrokehq/hubspot/triggers`, and domain paths like
345
+ `@keystrokehq/hubspot/companies` or `@keystrokehq/hubspot/contacts`.
346
346
 
347
347
  Import and use:
348
348
 
349
349
  ```ts
350
- import { createCompany } from '@keystroke/integration-hubspot/companies';
351
- import { searchContacts } from '@keystroke/integration-hubspot/contacts';
350
+ import { createCompany } from '@keystrokehq/hubspot/companies';
351
+ import { searchContacts } from '@keystrokehq/hubspot/contacts';
352
352
 
353
353
  const company = await createCompany.run(/* HubSpot create-company input */);
354
354
  const contacts = await searchContacts.run(/* HubSpot search-contacts input */);
@@ -390,21 +390,21 @@ const contacts = await searchContacts.run(/* HubSpot search-contacts input */);
390
390
  - `searchTickets`: Search HubSpot tickets.
391
391
  - `updateTicket`: Update a HubSpot ticket.
392
392
 
393
- ## `@keystroke/integration-kalshi`
393
+ ## `@keystrokehq/kalshi`
394
394
 
395
395
  Install:
396
396
 
397
397
  ```sh
398
- pnpm add @keystroke/integration-kalshi
398
+ pnpm add @keystrokehq/kalshi
399
399
  ```
400
400
 
401
- Prefer domain subpath imports such as `@keystroke/integration-kalshi/markets` or `@keystroke/integration-kalshi/portfolio`.
401
+ Prefer domain subpath imports such as `@keystrokehq/kalshi/markets` or `@keystrokehq/kalshi/portfolio`.
402
402
 
403
403
  Import and use:
404
404
 
405
405
  ```ts
406
- import { getMarkets } from '@keystroke/integration-kalshi/markets';
407
- import { createOrder } from '@keystroke/integration-kalshi/portfolio';
406
+ import { getMarkets } from '@keystrokehq/kalshi/markets';
407
+ import { createOrder } from '@keystrokehq/kalshi/portfolio';
408
408
 
409
409
  const markets = await getMarkets.run(/* Kalshi market-list input */);
410
410
  const order = await createOrder.run(/* Kalshi create-order input */);
@@ -542,20 +542,20 @@ const order = await createOrder.run(/* Kalshi create-order input */);
542
542
 
543
543
  This package also exports trigger helpers such as `polling`, `marketTrades`, `marketCandles`, `portfolioFills`, `portfolioOrderUpdates`, and `settledPositions`.
544
544
 
545
- ## `@keystroke/integration-linear`
545
+ ## `@keystrokehq/linear`
546
546
 
547
547
  Install:
548
548
 
549
549
  ```sh
550
- pnpm add @keystroke/integration-linear
550
+ pnpm add @keystrokehq/linear
551
551
  ```
552
552
 
553
- Prefer domain subpath imports such as `@keystroke/integration-linear/issues` or `@keystroke/integration-linear/users`.
553
+ Prefer domain subpath imports such as `@keystrokehq/linear/issues` or `@keystrokehq/linear/users`.
554
554
 
555
555
  Import and use:
556
556
 
557
557
  ```ts
558
- import { createIssue, searchIssues } from '@keystroke/integration-linear/issues';
558
+ import { createIssue, searchIssues } from '@keystrokehq/linear/issues';
559
559
 
560
560
  const issue = await createIssue.run(/* Linear create-issue input */);
561
561
  const matches = await searchIssues.run(/* Linear search-issues input */);
@@ -616,22 +616,22 @@ const matches = await searchIssues.run(/* Linear search-issues input */);
616
616
  - `deleteWebhook`: Delete a Linear webhook.
617
617
  - `listWebhooks`: List Linear webhooks.
618
618
 
619
- ## `@keystroke/integration-perplexity`
619
+ ## `@keystrokehq/perplexity`
620
620
 
621
621
  Install:
622
622
 
623
623
  ```sh
624
- pnpm add @keystroke/integration-perplexity
624
+ pnpm add @keystrokehq/perplexity
625
625
  ```
626
626
 
627
- Prefer subpath imports such as `@keystroke/integration-perplexity/search`, `@keystroke/integration-perplexity/stream`, and `@keystroke/integration-perplexity/generate`.
627
+ Prefer subpath imports such as `@keystrokehq/perplexity/search`, `@keystrokehq/perplexity/stream`, and `@keystrokehq/perplexity/generate`.
628
628
 
629
629
  Import and use:
630
630
 
631
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';
632
+ import { generateText } from '@keystrokehq/perplexity/generate';
633
+ import { research, search } from '@keystrokehq/perplexity/search';
634
+ import { streamSearch } from '@keystrokehq/perplexity/stream';
635
635
 
636
636
  const answer = await generateText.run(/* Perplexity text-generation input */);
637
637
  const results = await search.run(/* Perplexity search input */);
@@ -642,21 +642,21 @@ const results = await search.run(/* Perplexity search input */);
642
642
  - `search`: Run a Perplexity search query.
643
643
  - `streamSearch`: Stream Perplexity search results.
644
644
 
645
- ## `@keystroke/integration-polymarket`
645
+ ## `@keystrokehq/polymarket`
646
646
 
647
647
  Install:
648
648
 
649
649
  ```sh
650
- pnpm add @keystroke/integration-polymarket
650
+ pnpm add @keystrokehq/polymarket
651
651
  ```
652
652
 
653
- Prefer domain subpath imports such as `@keystroke/integration-polymarket/markets` or `@keystroke/integration-polymarket/discovery`.
653
+ Prefer domain subpath imports such as `@keystrokehq/polymarket/markets` or `@keystrokehq/polymarket/discovery`.
654
654
 
655
655
  Import and use:
656
656
 
657
657
  ```ts
658
- import { getMarket } from '@keystroke/integration-polymarket/markets';
659
- import { search } from '@keystroke/integration-polymarket/discovery';
658
+ import { getMarket } from '@keystrokehq/polymarket/markets';
659
+ import { search } from '@keystrokehq/polymarket/discovery';
660
660
 
661
661
  const market = await getMarket.run(/* Polymarket get-market input */);
662
662
  const results = await search.run(/* Polymarket search input */);
@@ -709,21 +709,21 @@ const results = await search.run(/* Polymarket search input */);
709
709
  - `getPriceHistory`: Fetch historical price data for a market.
710
710
  - `listPrices`: List prices across markets.
711
711
 
712
- ## `@keystroke/integration-scrapin`
712
+ ## `@keystrokehq/scrapin`
713
713
 
714
714
  Install:
715
715
 
716
716
  ```sh
717
- pnpm add @keystroke/integration-scrapin
717
+ pnpm add @keystrokehq/scrapin
718
718
  ```
719
719
 
720
- Prefer domain subpath imports such as `@keystroke/integration-scrapin/persons` or `@keystroke/integration-scrapin/companies`.
720
+ Prefer domain subpath imports such as `@keystrokehq/scrapin/persons` or `@keystrokehq/scrapin/companies`.
721
721
 
722
722
  Import and use:
723
723
 
724
724
  ```ts
725
- import { getCompanyProfile } from '@keystroke/integration-scrapin/companies';
726
- import { searchPersons } from '@keystroke/integration-scrapin/persons';
725
+ import { getCompanyProfile } from '@keystrokehq/scrapin/companies';
726
+ import { searchPersons } from '@keystrokehq/scrapin/persons';
727
727
 
728
728
  const company = await getCompanyProfile.run(/* Scrapin company-profile input */);
729
729
  const people = await searchPersons.run(/* Scrapin search-persons input */);
@@ -760,21 +760,21 @@ const people = await searchPersons.run(/* Scrapin search-persons input */);
760
760
  - `resolvePersonByEmail`: Resolve a person from an email address.
761
761
  - `searchPersons`: Search people.
762
762
 
763
- ## `@keystroke/integration-slack`
763
+ ## `@keystrokehq/slack`
764
764
 
765
765
  Install:
766
766
 
767
767
  ```sh
768
- pnpm add @keystroke/integration-slack
768
+ pnpm add @keystrokehq/slack
769
769
  ```
770
770
 
771
- Prefer mode/domain imports such as `@keystroke/integration-slack/platform/messages` or `@keystroke/integration-slack/platform/users`.
771
+ Prefer mode/domain imports such as `@keystrokehq/slack/platform/messages` or `@keystrokehq/slack/platform/users`.
772
772
 
773
773
  Import and use:
774
774
 
775
775
  ```ts
776
- import { sendMessage } from '@keystroke/integration-slack/platform/messages';
777
- import { listUsers } from '@keystroke/integration-slack/platform/users';
776
+ import { sendMessage } from '@keystrokehq/slack/platform/messages';
777
+ import { listUsers } from '@keystrokehq/slack/platform/users';
778
778
 
779
779
  const users = await listUsers.run(/* Slack list-users input */);
780
780
  const message = await sendMessage.run(/* Slack send-message input */);
@@ -239,7 +239,7 @@ Use these when operation behavior depends on retry state or when you want the st
239
239
 
240
240
  ## Public testing helpers
241
241
 
242
- Import these from `@keystrokehq/core/vitest`:
242
+ Import these from `@keystrokehq/testing/vitest`:
243
243
 
244
244
  - `keystrokeTestPlugin`
245
245
  - `createTestRuntime`
@@ -248,7 +248,7 @@ Import these from `@keystrokehq/core/vitest`:
248
248
 
249
249
  ### What they are used for
250
250
 
251
- - `keystrokeTestPlugin`: Vitest plugin that wires core test setup into the test process
251
+ - `keystrokeTestPlugin`: Vitest plugin that wires Keystroke testing setup into the test process
252
252
  - `createTestRuntime`: build a full workflow test runtime with workflow context plus step execution metadata
253
253
  - `createTestStepContext`: build only the operation / step context for isolated tests
254
254
  - `createMockHook`: create an immediately resolving hook for tests that would otherwise block on `ctx.createHook(...)`
@@ -256,7 +256,7 @@ Import these from `@keystrokehq/core/vitest`:
256
256
  Example:
257
257
 
258
258
  ```ts
259
- import { createMockHook } from '@keystrokehq/core/vitest';
259
+ import { createMockHook } from '@keystrokehq/testing/vitest';
260
260
 
261
261
  const hook = createMockHook();
262
262
  await hook;
@@ -9,7 +9,7 @@ import {
9
9
  createTestRuntime,
10
10
  createTestStepContext,
11
11
  keystrokeTestPlugin,
12
- } from '@keystrokehq/core/vitest';
12
+ } from '@keystrokehq/testing/vitest';
13
13
  ```
14
14
 
15
15
  `Operation`, `Step`, and `Tool` are aliases for the same class. In this workflow skill, prefer `Step` for examples and explanations, but `Operation` is equally valid for shared or integration-oriented code.
@@ -6,11 +6,11 @@ Assume `helloWorkflow`, `accountSyncWorkflow`, `loadCustomer`, `paymentWebhook`,
6
6
 
7
7
  ## Vitest setup
8
8
 
9
- `keystrokeTestPlugin()` adds the core test setup file to Vitest. Use it when you want normal `workflow.run(...)` and `step.run(...)` calls to work in tests without building custom harness code first.
9
+ `keystrokeTestPlugin()` adds the Keystroke testing setup file to Vitest. Use it when you want normal `workflow.run(...)` and `step.run(...)` calls to work in tests without building custom harness code first.
10
10
 
11
11
  ```ts
12
12
  import { defineConfig } from 'vitest/config';
13
- import { keystrokeTestPlugin } from '@keystrokehq/core/vitest';
13
+ import { keystrokeTestPlugin } from '@keystrokehq/testing/vitest';
14
14
 
15
15
  export default defineConfig({
16
16
  plugins: [keystrokeTestPlugin()],
@@ -39,7 +39,8 @@ test('returns the greeting', async () => {
39
39
  Use it when a workflow test needs more than plain input data.
40
40
 
41
41
  ```ts
42
- import { createMockHook, createTestRuntime } from '@keystrokehq/core/vitest';
42
+ import { createTestRuntime } from '@keystrokehq/testing';
43
+ import { createMockHook } from '@keystrokehq/testing/vitest';
43
44
 
44
45
  const runtime = createTestRuntime({
45
46
  workflowGlobals: {
@@ -59,7 +60,7 @@ await accountSyncWorkflow.run(
59
60
  `createTestStepContext()` is the smaller helper for operation unit tests. Use it when you want to call `step.run(...)` or `operation.run(...)` directly and provide only the runtime context values that operation reads.
60
61
 
61
62
  ```ts
62
- import { createTestStepContext } from '@keystrokehq/core/vitest';
63
+ import { createTestStepContext } from '@keystrokehq/testing';
63
64
 
64
65
  const stepContext = createTestStepContext({
65
66
  credentials: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keystrokehq/skills",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "publishConfig": {