Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import app from "../../hedy.app.mjs";

export default {
key: "hedy-create-session-context",
name: "Create Session Context",
description: "Creates a new reusable Hedy session context — a named set of custom AI instructions that can be applied to meeting recordings to guide analysis."
+ " Free accounts are limited to 1 context; Pro accounts can create multiple."
+ " Set `isDefault` to `true` to make this context automatically applied to new sessions."
+ " Use **Update Session Context** to modify an existing context, or **Delete Session Context** to remove one."
+ " [See the documentation](https://www.hedy.ai/help/hedy-api/)",
version: "0.0.1",
type: "action",
annotations: {
destructiveHint: false,
openWorldHint: true,
readOnlyHint: false,
},
props: {
app,
title: {
type: "string",
label: "Title",
description: "The context name (maximum 200 characters).",
},
content: {
type: "string",
label: "Content",
description: "The custom AI instruction text for this context (maximum 20,000 characters). Describe how Hedy should analyze meetings — e.g., focus areas, summary style, or specific data to extract.",
optional: true,
},
isDefault: {
type: "boolean",
label: "Set as Default",
description: "Set to `true` to make this the default context automatically applied to new sessions.",
optional: true,
default: false,
},
Comment thread
coderabbitai[bot] marked this conversation as resolved.
},
async run({ $ }) {
const data = {
title: this.title,
};
if (this.content) data.content = this.content;
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
if (this.isDefault !== undefined) data.isDefault = this.isDefault;

const response = await this.app.createContext({
$,
data,
});
const context = response?.data || response;
$.export("$summary", `Created session context: ${context?.title || this.title}`);
return response;
},
};
66 changes: 66 additions & 0 deletions components/hedy/actions/create-topic/create-topic.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import app from "../../hedy.app.mjs";

export default {
key: "hedy-create-topic",
name: "Create Topic",
description: "Creates a new Hedy meeting topic for organizing sessions."
+ " Topics can include a custom AI analysis context (`topicContext`) — up to 20,000 characters of instructions that guide Hedy's AI when analyzing meetings in this topic."
+ " Use **Update Topic** to modify an existing topic, or **Delete Topic** to remove one."
+ " [See the documentation](https://www.hedy.ai/help/hedy-api/)",
version: "0.0.1",
type: "action",
annotations: {
destructiveHint: false,
openWorldHint: true,
readOnlyHint: false,
},
props: {
app,
name: {
type: "string",
label: "Name",
description: "The topic name (maximum 100 characters).",
},
description: {
type: "string",
label: "Description",
description: "An optional description of the topic (maximum 500 characters).",
optional: true,
},
color: {
type: "string",
label: "Color",
description: "Optional hex color code for the topic (e.g. `#4CAF50`).",
optional: true,
},
iconName: {
type: "string",
label: "Icon Name",
description: "Optional icon identifier for the topic.",
optional: true,
},
topicContext: {
type: "string",
label: "Topic Context",
description: "Optional custom AI instructions for analyzing sessions in this topic (maximum 20,000 characters). Use this to focus Hedy's analysis on specific themes, extract particular insights, or follow custom frameworks.",
optional: true,
},
},
async run({ $ }) {
const data = {
name: this.name,
};
if (this.description) data.description = this.description;
if (this.color) data.color = this.color;
if (this.iconName) data.iconName = this.iconName;
if (this.topicContext) data.topicContext = this.topicContext;

const response = await this.app.createTopic({
$,
data,
});
const topic = response?.data || response;
$.export("$summary", `Created topic: ${topic?.name || this.name}`);
return response;
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import app from "../../hedy.app.mjs";

export default {
key: "hedy-delete-session-context",
name: "Delete Session Context",
description: "Deletes a Hedy session context. This action is irreversible."
+ " If you delete the current default context, the most recently created remaining context is automatically promoted to default."
+ " Use **Get Many Session Contexts** to find the context ID before deleting."
+ " [See the documentation](https://www.hedy.ai/help/hedy-api/)",
version: "0.0.1",
type: "action",
annotations: {
destructiveHint: true,
openWorldHint: true,
readOnlyHint: false,
},
props: {
app,
contextId: {
propDefinition: [
app,
"contextId",
],
},
},
async run({ $ }) {
const response = await this.app.deleteContext({
$,
contextId: this.contextId,
});
$.export("$summary", `Deleted session context ${this.contextId}`);
return response;
},
};
33 changes: 33 additions & 0 deletions components/hedy/actions/delete-topic/delete-topic.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import app from "../../hedy.app.mjs";

export default {
key: "hedy-delete-topic",
name: "Delete Topic",
description: "Deletes a Hedy topic. Sessions that were linked to the topic are NOT deleted — they are unlinked and remain in your account."
+ " This action is irreversible. Use **Get Many Topics** to find the topic ID before deleting."
+ " [See the documentation](https://www.hedy.ai/help/hedy-api/)",
version: "0.0.1",
type: "action",
annotations: {
destructiveHint: true,
openWorldHint: true,
readOnlyHint: false,
},
props: {
app,
topicId: {
propDefinition: [
app,
"topicId",
],
},
},
async run({ $ }) {
const response = await this.app.deleteTopic({
$,
topicId: this.topicId,
});
$.export("$summary", `Deleted topic ${this.topicId}`);
return response;
},
};
27 changes: 27 additions & 0 deletions components/hedy/actions/get-current-user/get-current-user.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import app from "../../hedy.app.mjs";

export default {
key: "hedy-get-current-user",
name: "Get Current User",
description: "Retrieves the account details for the authenticated Hedy user, including email, display name, and plan information."
+ " Use this tool first to establish identity — the returned user ID anchors queries like 'my sessions' or 'my topics'."
+ " [See the documentation](https://www.hedy.ai/help/hedy-api/)",
version: "0.0.1",
Comment thread
sergio-eliot-rodriguez marked this conversation as resolved.
Outdated
type: "action",
annotations: {
destructiveHint: false,
openWorldHint: true,
readOnlyHint: true,
},
props: {
app,
},
async run({ $ }) {
const response = await this.app.getCurrentUser({
$,
});
const user = response?.data || response;
$.export("$summary", `Retrieved account details for ${user?.email || user?.name || "user"}`);
return response;
},
};
34 changes: 34 additions & 0 deletions components/hedy/actions/get-highlight/get-highlight.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import app from "../../hedy.app.mjs";

export default {
key: "hedy-get-highlight",
name: "Get Highlight",
description: "Retrieves full details for a single AI-generated highlight by ID, including the raw quote, cleaned quote, main idea, and AI insight."
+ " Use **Get Many Highlights** or **Get Highlights By Session** first to find a highlight ID."
+ " [See the documentation](https://www.hedy.ai/help/hedy-api/)",
version: "0.0.1",
type: "action",
annotations: {
destructiveHint: false,
openWorldHint: true,
readOnlyHint: true,
},
props: {
app,
highlightId: {
propDefinition: [
app,
"highlightId",
],
},
},
async run({ $ }) {
const response = await this.app.getHighlight({
$,
highlightId: this.highlightId,
});
const highlight = response?.data || response;
$.export("$summary", `Retrieved highlight: ${highlight?.title || this.highlightId}`);
return response;
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import app from "../../hedy.app.mjs";

export default {
key: "hedy-get-highlights-by-session",
name: "Get Highlights By Session",
description: "Retrieves all AI-generated highlights for a specific Hedy session."
+ " Use **Get Many Sessions** first to find the session ID."
+ " Each result includes a highlight ID, title, and timestamp within the session."
+ " Use **Get Highlight** with the highlight ID to fetch the full detail including raw quote, cleaned quote, main idea, and AI insight."
+ " [See the documentation](https://www.hedy.ai/help/hedy-api/)",
version: "0.0.1",
type: "action",
annotations: {
destructiveHint: false,
openWorldHint: true,
readOnlyHint: true,
},
props: {
app,
sessionId: {
propDefinition: [
app,
"sessionId",
],
},
limit: {
propDefinition: [
app,
"limit",
],
},
after: {
propDefinition: [
app,
"after",
],
},
Comment thread
michelle0927 marked this conversation as resolved.
Outdated
},
async run({ $ }) {
const params = {};
if (this.limit) params.limit = this.limit;
if (this.after) params.after = this.after;

const response = await this.app.getHighlightsBySession({
$,
sessionId: this.sessionId,
params,
});
const highlights = response?.data || [];
$.export("$summary", `Retrieved ${highlights.length} highlight${highlights.length === 1
? ""
: "s"} for session ${this.sessionId}`);
return response;
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import app from "../../hedy.app.mjs";

export default {
key: "hedy-get-many-highlights",
name: "Get Many Highlights",
description: "Retrieves a paginated list of AI-generated highlights across all Hedy sessions."
+ " Each highlight includes a title, timestamp, and the session it came from."
+ " Use **Get Highlight** with a specific highlight ID to fetch the full detail including raw quote, cleaned quote, main idea, and AI insight."
+ " To list highlights for a specific session only, use **Get Highlights By Session**."
+ " [See the documentation](https://www.hedy.ai/help/hedy-api/)",
version: "0.0.1",
type: "action",
annotations: {
destructiveHint: false,
openWorldHint: true,
readOnlyHint: true,
},
props: {
app,
limit: {
propDefinition: [
app,
"limit",
],
},
after: {
propDefinition: [
app,
"after",
],
},
},
async run({ $ }) {
const params = {};
if (this.limit) params.limit = this.limit;
if (this.after) params.after = this.after;

const response = await this.app.listHighlights({
$,
params,
});
const highlights = response?.data || [];
$.export("$summary", `Retrieved ${highlights.length} highlight${highlights.length === 1
? ""
: "s"}`);
return response;
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import app from "../../hedy.app.mjs";

export default {
key: "hedy-get-many-session-contexts",
name: "Get Many Session Contexts",
description: "Retrieves all reusable Hedy session contexts, including title, content, and which one is set as the default."
+ " Session contexts are custom AI instruction sets that guide Hedy's analysis of meeting recordings."
+ " Use this tool to browse available contexts or to find a context ID to pass to **Get Session Context**, **Update Session Context**, or **Delete Session Context**."
+ " [See the documentation](https://www.hedy.ai/help/hedy-api/)",
version: "0.0.1",
type: "action",
annotations: {
destructiveHint: false,
openWorldHint: true,
readOnlyHint: true,
},
props: {
app,
},
async run({ $ }) {
const response = await this.app.listContexts({
$,
});
const contexts = response?.data || [];
$.export("$summary", `Retrieved ${contexts.length} session context${contexts.length === 1
? ""
: "s"}`);
Comment thread
sergio-eliot-rodriguez marked this conversation as resolved.
return response;
},
};
Loading
Loading