@credal/actions 0.2.179 → 0.2.181

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 (55) hide show
  1. package/README.md +29 -0
  2. package/dist/actions/actionMapper.js +8 -1
  3. package/dist/actions/autogen/definitions.d.ts +5 -0
  4. package/dist/actions/autogen/definitions.js +132 -0
  5. package/dist/actions/autogen/templates.d.ts +1 -0
  6. package/dist/actions/autogen/templates.js +107 -48
  7. package/dist/actions/autogen/types.d.ts +50 -11
  8. package/dist/actions/autogen/types.js +71 -41
  9. package/dist/actions/definitions.js +35 -0
  10. package/dist/actions/groups.js +11 -1
  11. package/dist/actions/invokeMapper.d.ts +9 -0
  12. package/dist/actions/invokeMapper.js +33 -0
  13. package/dist/actions/providers/confluence/updatePage.d.ts +3 -0
  14. package/dist/actions/providers/confluence/updatePage.js +43 -0
  15. package/dist/actions/providers/credal/callCopilot.d.ts +3 -0
  16. package/dist/actions/providers/credal/callCopilot.js +36 -0
  17. package/dist/actions/providers/google-oauth/appendRowsToSpreadsheet.d.ts +7 -0
  18. package/dist/actions/providers/google-oauth/appendRowsToSpreadsheet.js +61 -0
  19. package/dist/actions/providers/google-oauth/getSheetValue.d.ts +3 -0
  20. package/dist/actions/providers/google-oauth/getSheetValue.js +50 -0
  21. package/dist/actions/providers/google-oauth/getSheetValues.d.ts +3 -0
  22. package/dist/actions/providers/google-oauth/getSheetValues.js +50 -0
  23. package/dist/actions/providers/google-oauth/listGmailThreads.d.ts +3 -0
  24. package/dist/actions/providers/google-oauth/listGmailThreads.js +98 -0
  25. package/dist/actions/providers/google-oauth/searchGmailMessages.d.ts +3 -0
  26. package/dist/actions/providers/google-oauth/searchGmailMessages.js +91 -0
  27. package/dist/actions/providers/googlemaps/nearbysearch.d.ts +3 -0
  28. package/dist/actions/providers/googlemaps/nearbysearch.js +96 -0
  29. package/dist/actions/providers/jamf/types.d.ts +8 -0
  30. package/dist/actions/providers/jamf/types.js +7 -0
  31. package/dist/actions/providers/jira/createTicket.d.ts +3 -0
  32. package/dist/actions/providers/jira/createTicket.js +34 -0
  33. package/dist/actions/providers/math/index.d.ts +1 -0
  34. package/dist/actions/providers/math/index.js +37 -0
  35. package/dist/actions/providers/salesforce/createRecord.js +2 -2
  36. package/dist/actions/providers/salesforce/getRecord.js +2 -2
  37. package/dist/actions/providers/salesforce/getSalesforceRecordByQuery.d.ts +3 -0
  38. package/dist/actions/providers/salesforce/getSalesforceRecordByQuery.js +43 -0
  39. package/dist/actions/providers/salesforce/updateRecord.js +2 -2
  40. package/dist/actions/providers/slack/index.d.ts +1 -0
  41. package/dist/actions/providers/slack/index.js +37 -0
  42. package/dist/actions/providers/slack/listConversations.d.ts +3 -0
  43. package/dist/actions/providers/slack/listConversations.js +41 -0
  44. package/dist/actions/providers/slack/list_conversations.d.ts +3 -0
  45. package/dist/actions/providers/slack/list_conversations.js +60 -0
  46. package/dist/actions/providers/slack/summarizeChannel.d.ts +3 -0
  47. package/dist/actions/providers/slack/summarizeChannel.js +51 -0
  48. package/dist/actions/schema.js +6 -0
  49. package/dist/actions/types.js +2 -0
  50. package/dist/main.js +11 -0
  51. package/package.json +1 -1
  52. package/dist/actions/providers/github/fetchFile.d.ts +0 -3
  53. package/dist/actions/providers/github/fetchFile.js +0 -131
  54. package/dist/actions/providers/github/getContents.d.ts +0 -3
  55. package/dist/actions/providers/github/getContents.js +0 -41
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const web_api_1 = require("@slack/web-api");
13
+ const helpers_1 = require("./helpers");
14
+ const slackListConversations = (_a) => __awaiter(void 0, [_a], void 0, function* ({ authParams, }) {
15
+ const client = new web_api_1.WebClient(authParams.authToken);
16
+ try {
17
+ const allChannels = yield (0, helpers_1.getSlackChannels)(client);
18
+ const filteredChannels = [];
19
+ for (const channel of allChannels) {
20
+ if (channel.name && channel.topic && channel.topic.value && channel.purpose && channel.purpose.value) {
21
+ const purpose = channel.purpose.value;
22
+ const topic = channel.topic.value;
23
+ const name = channel.name;
24
+ filteredChannels.push(Object.assign(Object.assign({}, channel), { purpose, topic, name }));
25
+ }
26
+ }
27
+ return {
28
+ channels: filteredChannels,
29
+ };
30
+ }
31
+ catch (error) {
32
+ if (error instanceof Error) {
33
+ // Enhance error with more context
34
+ throw new Error(`Failed to list Slack conversations: ${error.message}`);
35
+ }
36
+ else {
37
+ throw error;
38
+ }
39
+ }
40
+ });
41
+ exports.default = slackListConversations;
@@ -0,0 +1,3 @@
1
+ import { slackListConversationsFunction } from "../../../actions/autogen/types";
2
+ declare const slackListConversations: slackListConversationsFunction;
3
+ export default slackListConversations;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const web_api_1 = require("@slack/web-api");
13
+ const slackListConversations = (_a) => __awaiter(void 0, [_a], void 0, function* ({ authParams, }) {
14
+ var _b;
15
+ const client = new web_api_1.WebClient(authParams.authToken);
16
+ const allChannels = [];
17
+ let cursor;
18
+ const limit = 100;
19
+ try {
20
+ do {
21
+ const response = yield client.conversations.list({
22
+ exclude_archived: true,
23
+ limit: limit,
24
+ cursor: cursor,
25
+ });
26
+ if (!response.ok) {
27
+ throw new Error(`Slack API error: ${response.error}`);
28
+ }
29
+ // Add channels from this page to our results
30
+ if (response.channels && Array.isArray(response.channels)) {
31
+ allChannels.push(...response.channels);
32
+ }
33
+ // Get cursor for next page
34
+ cursor = (_b = response.response_metadata) === null || _b === void 0 ? void 0 : _b.next_cursor;
35
+ // If user specified a limit and we've hit it, stop paginating
36
+ if (limit && allChannels.length >= limit) {
37
+ allChannels.splice(limit); // Trim to exact limit
38
+ break;
39
+ }
40
+ } while (cursor && cursor.length > 0);
41
+ return {
42
+ channels: allChannels.map(channel => ({
43
+ id: channel.id,
44
+ name: channel.name,
45
+ topic: channel.topic.value,
46
+ purpose: channel.purpose.value,
47
+ })),
48
+ };
49
+ }
50
+ catch (error) {
51
+ if (error instanceof Error) {
52
+ // Enhance error with more context
53
+ throw new Error(`Failed to list Slack conversations: ${error.message}`);
54
+ }
55
+ else {
56
+ throw error;
57
+ }
58
+ }
59
+ });
60
+ exports.default = slackListConversations;
@@ -0,0 +1,3 @@
1
+ import { slackSummarizeChannelFunction } from "../../autogen/types";
2
+ declare const summarizeChannel: slackSummarizeChannelFunction;
3
+ export default summarizeChannel;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const web_api_1 = require("@slack/web-api");
16
+ const helpers_1 = require("./helpers");
17
+ const openai_1 = __importDefault(require("openai"));
18
+ const summarizeChannel = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
19
+ var _b;
20
+ const client = new web_api_1.WebClient(authParams.authToken);
21
+ const { channelName } = params;
22
+ const allChannels = yield (0, helpers_1.getSlackChannels)(client);
23
+ const channel = allChannels.find(channel => channel.name === channelName && channel.is_private === false);
24
+ if (!channel || !channel.id) {
25
+ throw Error(`Channel with name ${channelName} not found`);
26
+ }
27
+ // summarize last 50 messages
28
+ const messages = yield client.conversations.history({
29
+ channel: channel.id,
30
+ limit: 50,
31
+ });
32
+ if (!messages.ok) {
33
+ throw Error(`Failed to fetch messages from channel ${channel.name}`);
34
+ }
35
+ const history = ((_b = messages.messages) === null || _b === void 0 ? void 0 : _b.reverse().map(message => message.user + ":" + message.text).join("\n")) || "";
36
+ const oai = new openai_1.default();
37
+ const completion = yield oai.chat.completions.create({
38
+ model: "gpt-4o-mini",
39
+ messages: [
40
+ {
41
+ role: "user",
42
+ content: "Summarize the following messages in the Slack channel:\n" + history,
43
+ },
44
+ ],
45
+ });
46
+ const summary = completion.choices[0].message.content || "";
47
+ return {
48
+ summary: summary,
49
+ };
50
+ });
51
+ exports.default = summarizeChannel;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createParametersObject = createParametersObject;
4
+ function createParametersObject(parameters) {
5
+ return Object.fromEntries(Object.entries(parameters).map(([key, param]) => [key, param.type]));
6
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/dist/main.js ADDED
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const list_conversations_1 = __importDefault(require("./actions/providers/slack/list_conversations"));
7
+ const result = (0, list_conversations_1.default)({
8
+ accessToken: "xoxp-4172665288294-8092684180551-8154529379075-89f1f70cc06e5648e8f912ba96f56626"
9
+ }).then((result) => {
10
+ console.log(result);
11
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@credal/actions",
3
- "version": "0.2.179",
3
+ "version": "0.2.181",
4
4
  "type": "module",
5
5
  "description": "AI Actions by Credal AI",
6
6
  "sideEffects": false,
@@ -1,3 +0,0 @@
1
- import type { githubSearchRepositoryFunction } from "../../autogen/types.js";
2
- declare const searchRepository: githubSearchRepositoryFunction;
3
- export default searchRepository;
@@ -1,131 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
11
- // Limits on the number of results to return
12
- const MAX_CODE_RESULTS = 15;
13
- const MAX_COMMITS = 10;
14
- const MAX_FILES_PER_COMMIT = 5;
15
- const MAX_ISSUES_OR_PRS = 10;
16
- const MAX_FILES_PER_PR = 5;
17
- const MAX_PATCH_LINES = 20;
18
- const MAX_FRAGMENT_LINES = 20;
19
- const searchRepository = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
20
- const { Octokit } = yield import("octokit");
21
- if (!authParams.authToken) {
22
- throw new Error(MISSING_AUTH_TOKEN);
23
- }
24
- const octokit = new Octokit({ auth: authParams.authToken });
25
- const { organization, repository, query } = params;
26
- // Search CODE with text match metadata
27
- const codeResultsResponse = yield octokit.rest.search.code({
28
- q: `${query} in:file,path repo:${organization}/${repository}`,
29
- text_match: true,
30
- headers: {
31
- accept: "application/vnd.github.v3.text-match+json",
32
- },
33
- });
34
- const codeResults = codeResultsResponse.data.items.slice(0, MAX_CODE_RESULTS).map(item => ({
35
- name: item.name,
36
- path: item.path,
37
- sha: item.sha,
38
- url: item.url,
39
- repository: {
40
- full_name: item.repository.full_name,
41
- html_url: item.repository.html_url,
42
- },
43
- score: item.score,
44
- textMatches: item.text_matches
45
- ? item.text_matches.map(match => {
46
- var _a, _b, _c, _d;
47
- return ({
48
- object_url: (_a = match.object_url) !== null && _a !== void 0 ? _a : undefined,
49
- object_type: (_b = match.object_type) !== null && _b !== void 0 ? _b : undefined,
50
- fragment: (_c = match.fragment) === null || _c === void 0 ? void 0 : _c.split("\n").slice(0, MAX_FRAGMENT_LINES).join("\n"),
51
- matches: (_d = match.matches) !== null && _d !== void 0 ? _d : [],
52
- });
53
- })
54
- : [],
55
- }));
56
- // Search COMMITS
57
- const commitResults = yield octokit.rest.search.commits({
58
- q: `${query} repo:${organization}/${repository}`,
59
- headers: {
60
- accept: "application/vnd.github.cloak-preview+json",
61
- },
62
- });
63
- const commitSHAs = commitResults.data.items.slice(0, MAX_COMMITS).map(item => item.sha);
64
- const commitDetails = yield Promise.all(commitSHAs.map(sha => octokit.rest.repos.getCommit({ owner: organization, repo: repository, ref: sha })));
65
- const enrichedCommits = commitResults.data.items.slice(0, MAX_COMMITS).map(item => {
66
- var _a, _b;
67
- const full = commitDetails.find(c => c.data.sha === item.sha);
68
- return {
69
- sha: item.sha,
70
- url: item.url,
71
- commit: {
72
- message: item.commit.message,
73
- author: item.commit.author,
74
- },
75
- score: item.score,
76
- author: (_a = item.author) !== null && _a !== void 0 ? _a : undefined,
77
- files: ((_b = full === null || full === void 0 ? void 0 : full.data.files) === null || _b === void 0 ? void 0 : _b.slice(0, MAX_FILES_PER_COMMIT).map(f => {
78
- var _a;
79
- return ({
80
- filename: f.filename,
81
- status: f.status,
82
- patch: (_a = f.patch) === null || _a === void 0 ? void 0 : _a.split("\n").slice(0, MAX_PATCH_LINES).join("\n"),
83
- });
84
- })) || [],
85
- };
86
- });
87
- // Search ISSUES & PRs
88
- const issueResults = yield octokit.rest.search.issuesAndPullRequests({
89
- q: `${query} repo:${organization}/${repository}`,
90
- });
91
- const prItems = issueResults.data.items.filter(item => item.pull_request).slice(0, MAX_ISSUES_OR_PRS);
92
- const prNumbers = prItems.map(item => item.number);
93
- const prFiles = yield Promise.all(prNumbers.map(number => octokit.rest.pulls.listFiles({ owner: organization, repo: repository, pull_number: number })));
94
- const issuesAndPRs = issueResults.data.items
95
- .slice(0, MAX_ISSUES_OR_PRS)
96
- .map(item => {
97
- var _a, _b, _c, _d;
98
- const isPR = !!item.pull_request;
99
- const prIndex = prNumbers.indexOf(item.number);
100
- const files = isPR && prIndex !== -1
101
- ? prFiles[prIndex].data.slice(0, MAX_FILES_PER_PR).map(f => {
102
- var _a;
103
- return ({
104
- filename: f.filename,
105
- status: f.status,
106
- patch: (_a = f.patch) === null || _a === void 0 ? void 0 : _a.split("\n").slice(0, MAX_PATCH_LINES).join("\n"),
107
- });
108
- })
109
- : undefined;
110
- return {
111
- number: item.number,
112
- title: item.title,
113
- html_url: item.html_url,
114
- state: item.state,
115
- isPullRequest: isPR,
116
- body: item.body,
117
- user: {
118
- email: (_b = (_a = item.user) === null || _a === void 0 ? void 0 : _a.email) !== null && _b !== void 0 ? _b : undefined,
119
- name: (_d = (_c = item.user) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : undefined,
120
- },
121
- score: item.score,
122
- files,
123
- };
124
- });
125
- return {
126
- code: codeResults,
127
- commits: enrichedCommits,
128
- issuesAndPullRequests: issuesAndPRs,
129
- };
130
- });
131
- export default searchRepository;
@@ -1,3 +0,0 @@
1
- import type { githubSearchRepositoryFunction } from "../../autogen/types.js";
2
- declare const searchRepository: githubSearchRepositoryFunction;
3
- export default searchRepository;
@@ -1,41 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
11
- // Limits on the number of results to return
12
- const MAX_CODE_RESULTS = 15;
13
- const MAX_COMMITS = 10;
14
- const MAX_FILES_PER_COMMIT = 5;
15
- const MAX_ISSUES_OR_PRS = 10;
16
- const MAX_FILES_PER_PR = 5;
17
- const MAX_PATCH_LINES = 20;
18
- const MAX_FRAGMENT_LINES = 20;
19
- const searchRepository = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
20
- const { Octokit } = yield import("octokit");
21
- if (!authParams.authToken) {
22
- throw new Error(MISSING_AUTH_TOKEN);
23
- }
24
- const octokit = new Octokit({ auth: authParams.authToken });
25
- const { organization, repository, query } = params;
26
- // Search CODE with text match metadata
27
- const codeResultsResponse = yield octokit.rest.search.code({
28
- q: `${query} in:file,path repo:${organization}/${repository}`,
29
- text_match: true,
30
- headers: {
31
- accept: "application/vnd.github.v3.text-match+json",
32
- },
33
- });
34
- const commitResults = yield octokit.rest.repos.getCommit({ owner: organization, repo: repository, ref: sha });
35
- return {
36
- code: codeResults,
37
- commits: enrichedCommits,
38
- issuesAndPullRequests: issuesAndPRs,
39
- };
40
- });
41
- export default searchRepository;