@opentabs-dev/opentabs-plugin-posthog 0.0.74

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 (145) hide show
  1. package/README.md +159 -0
  2. package/dist/adapter.iife.js +15614 -0
  3. package/dist/adapter.iife.js.map +7 -0
  4. package/dist/index.d.ts +14 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +104 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/posthog-api.d.ts +21 -0
  9. package/dist/posthog-api.d.ts.map +1 -0
  10. package/dist/posthog-api.js +82 -0
  11. package/dist/posthog-api.js.map +1 -0
  12. package/dist/tools/create-annotation.d.ts +20 -0
  13. package/dist/tools/create-annotation.d.ts.map +1 -0
  14. package/dist/tools/create-annotation.js +31 -0
  15. package/dist/tools/create-annotation.js.map +1 -0
  16. package/dist/tools/create-dashboard.d.ts +25 -0
  17. package/dist/tools/create-dashboard.d.ts.map +1 -0
  18. package/dist/tools/create-dashboard.js +29 -0
  19. package/dist/tools/create-dashboard.js.map +1 -0
  20. package/dist/tools/create-experiment.d.ts +23 -0
  21. package/dist/tools/create-experiment.d.ts.map +1 -0
  22. package/dist/tools/create-experiment.js +31 -0
  23. package/dist/tools/create-experiment.js.map +1 -0
  24. package/dist/tools/create-feature-flag.d.ts +26 -0
  25. package/dist/tools/create-feature-flag.d.ts.map +1 -0
  26. package/dist/tools/create-feature-flag.js +45 -0
  27. package/dist/tools/create-feature-flag.js.map +1 -0
  28. package/dist/tools/delete-annotation.d.ts +7 -0
  29. package/dist/tools/delete-annotation.d.ts.map +1 -0
  30. package/dist/tools/delete-annotation.js +22 -0
  31. package/dist/tools/delete-annotation.js.map +1 -0
  32. package/dist/tools/delete-dashboard.d.ts +7 -0
  33. package/dist/tools/delete-dashboard.d.ts.map +1 -0
  34. package/dist/tools/delete-dashboard.js +22 -0
  35. package/dist/tools/delete-dashboard.js.map +1 -0
  36. package/dist/tools/delete-feature-flag.d.ts +7 -0
  37. package/dist/tools/delete-feature-flag.d.ts.map +1 -0
  38. package/dist/tools/delete-feature-flag.js +22 -0
  39. package/dist/tools/delete-feature-flag.js.map +1 -0
  40. package/dist/tools/delete-insight.d.ts +7 -0
  41. package/dist/tools/delete-insight.d.ts.map +1 -0
  42. package/dist/tools/delete-insight.js +23 -0
  43. package/dist/tools/delete-insight.js.map +1 -0
  44. package/dist/tools/get-action.d.ts +19 -0
  45. package/dist/tools/get-action.d.ts.map +1 -0
  46. package/dist/tools/get-action.js +23 -0
  47. package/dist/tools/get-action.js.map +1 -0
  48. package/dist/tools/get-cohort.d.ts +20 -0
  49. package/dist/tools/get-cohort.d.ts.map +1 -0
  50. package/dist/tools/get-cohort.js +23 -0
  51. package/dist/tools/get-cohort.js.map +1 -0
  52. package/dist/tools/get-current-user.d.ts +14 -0
  53. package/dist/tools/get-current-user.d.ts.map +1 -0
  54. package/dist/tools/get-current-user.js +32 -0
  55. package/dist/tools/get-current-user.js.map +1 -0
  56. package/dist/tools/get-dashboard.d.ts +22 -0
  57. package/dist/tools/get-dashboard.d.ts.map +1 -0
  58. package/dist/tools/get-dashboard.js +23 -0
  59. package/dist/tools/get-dashboard.js.map +1 -0
  60. package/dist/tools/get-experiment.d.ts +21 -0
  61. package/dist/tools/get-experiment.d.ts.map +1 -0
  62. package/dist/tools/get-experiment.js +23 -0
  63. package/dist/tools/get-experiment.js.map +1 -0
  64. package/dist/tools/get-feature-flag.d.ts +22 -0
  65. package/dist/tools/get-feature-flag.d.ts.map +1 -0
  66. package/dist/tools/get-feature-flag.js +23 -0
  67. package/dist/tools/get-feature-flag.js.map +1 -0
  68. package/dist/tools/get-insight.d.ts +26 -0
  69. package/dist/tools/get-insight.d.ts.map +1 -0
  70. package/dist/tools/get-insight.js +24 -0
  71. package/dist/tools/get-insight.js.map +1 -0
  72. package/dist/tools/get-organization.d.ts +10 -0
  73. package/dist/tools/get-organization.d.ts.map +1 -0
  74. package/dist/tools/get-organization.js +21 -0
  75. package/dist/tools/get-organization.js.map +1 -0
  76. package/dist/tools/get-person.d.ts +14 -0
  77. package/dist/tools/get-person.d.ts.map +1 -0
  78. package/dist/tools/get-person.js +23 -0
  79. package/dist/tools/get-person.js.map +1 -0
  80. package/dist/tools/get-project.d.ts +15 -0
  81. package/dist/tools/get-project.d.ts.map +1 -0
  82. package/dist/tools/get-project.js +24 -0
  83. package/dist/tools/get-project.js.map +1 -0
  84. package/dist/tools/get-survey.d.ts +16 -0
  85. package/dist/tools/get-survey.d.ts.map +1 -0
  86. package/dist/tools/get-survey.js +23 -0
  87. package/dist/tools/get-survey.js.map +1 -0
  88. package/dist/tools/list-actions.d.ts +22 -0
  89. package/dist/tools/list-actions.d.ts.map +1 -0
  90. package/dist/tools/list-actions.js +30 -0
  91. package/dist/tools/list-actions.js.map +1 -0
  92. package/dist/tools/list-annotations.d.ts +22 -0
  93. package/dist/tools/list-annotations.d.ts.map +1 -0
  94. package/dist/tools/list-annotations.js +29 -0
  95. package/dist/tools/list-annotations.js.map +1 -0
  96. package/dist/tools/list-cohorts.d.ts +23 -0
  97. package/dist/tools/list-cohorts.d.ts.map +1 -0
  98. package/dist/tools/list-cohorts.js +30 -0
  99. package/dist/tools/list-cohorts.js.map +1 -0
  100. package/dist/tools/list-dashboards.d.ts +25 -0
  101. package/dist/tools/list-dashboards.d.ts.map +1 -0
  102. package/dist/tools/list-dashboards.js +30 -0
  103. package/dist/tools/list-dashboards.js.map +1 -0
  104. package/dist/tools/list-experiments.d.ts +24 -0
  105. package/dist/tools/list-experiments.d.ts.map +1 -0
  106. package/dist/tools/list-experiments.js +30 -0
  107. package/dist/tools/list-experiments.js.map +1 -0
  108. package/dist/tools/list-feature-flags.d.ts +27 -0
  109. package/dist/tools/list-feature-flags.d.ts.map +1 -0
  110. package/dist/tools/list-feature-flags.js +35 -0
  111. package/dist/tools/list-feature-flags.js.map +1 -0
  112. package/dist/tools/list-insights.d.ts +31 -0
  113. package/dist/tools/list-insights.d.ts.map +1 -0
  114. package/dist/tools/list-insights.js +38 -0
  115. package/dist/tools/list-insights.js.map +1 -0
  116. package/dist/tools/list-persons.d.ts +19 -0
  117. package/dist/tools/list-persons.d.ts.map +1 -0
  118. package/dist/tools/list-persons.js +35 -0
  119. package/dist/tools/list-persons.js.map +1 -0
  120. package/dist/tools/list-projects.d.ts +18 -0
  121. package/dist/tools/list-projects.d.ts.map +1 -0
  122. package/dist/tools/list-projects.js +31 -0
  123. package/dist/tools/list-projects.js.map +1 -0
  124. package/dist/tools/list-surveys.d.ts +20 -0
  125. package/dist/tools/list-surveys.d.ts.map +1 -0
  126. package/dist/tools/list-surveys.js +29 -0
  127. package/dist/tools/list-surveys.js.map +1 -0
  128. package/dist/tools/schemas.d.ts +452 -0
  129. package/dist/tools/schemas.d.ts.map +1 -0
  130. package/dist/tools/schemas.js +276 -0
  131. package/dist/tools/schemas.js.map +1 -0
  132. package/dist/tools/update-dashboard.d.ts +26 -0
  133. package/dist/tools/update-dashboard.d.ts.map +1 -0
  134. package/dist/tools/update-dashboard.js +31 -0
  135. package/dist/tools/update-dashboard.js.map +1 -0
  136. package/dist/tools/update-feature-flag.d.ts +26 -0
  137. package/dist/tools/update-feature-flag.d.ts.map +1 -0
  138. package/dist/tools/update-feature-flag.js +42 -0
  139. package/dist/tools/update-feature-flag.js.map +1 -0
  140. package/dist/tools/update-insight.d.ts +30 -0
  141. package/dist/tools/update-insight.d.ts.map +1 -0
  142. package/dist/tools/update-insight.js +40 -0
  143. package/dist/tools/update-insight.js.map +1 -0
  144. package/dist/tools.json +3530 -0
  145. package/package.json +55 -0
@@ -0,0 +1,14 @@
1
+ import { OpenTabsPlugin } from '@opentabs-dev/plugin-sdk';
2
+ import type { ToolDefinition } from '@opentabs-dev/plugin-sdk';
3
+ declare class PostHogPlugin extends OpenTabsPlugin {
4
+ readonly name = "posthog";
5
+ readonly description = "OpenTabs plugin for PostHog";
6
+ readonly displayName = "PostHog";
7
+ readonly urlPatterns: string[];
8
+ readonly homepage = "https://us.posthog.com";
9
+ readonly tools: ToolDefinition[];
10
+ isReady(): Promise<boolean>;
11
+ }
12
+ declare const _default: PostHogPlugin;
13
+ export default _default;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAyD/D,cAAM,aAAc,SAAQ,cAAc;IACxC,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,iCAAiC;IACrD,SAAkB,WAAW,aAAa;IAC1C,QAAQ,CAAC,WAAW,WAAoD;IACxE,SAAkB,QAAQ,4BAA4B;IAEtD,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,CAsD9B;IAEI,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;CAIlC;;AAED,wBAAmC"}
package/dist/index.js ADDED
@@ -0,0 +1,104 @@
1
+ import { OpenTabsPlugin } from '@opentabs-dev/plugin-sdk';
2
+ import { isAuthenticated, waitForAuth } from './posthog-api.js';
3
+ // Users & Organization
4
+ import { getCurrentUser } from './tools/get-current-user.js';
5
+ import { getOrganization } from './tools/get-organization.js';
6
+ // Projects
7
+ import { listProjects } from './tools/list-projects.js';
8
+ import { getProject } from './tools/get-project.js';
9
+ // Dashboards
10
+ import { listDashboards } from './tools/list-dashboards.js';
11
+ import { getDashboard } from './tools/get-dashboard.js';
12
+ import { createDashboard } from './tools/create-dashboard.js';
13
+ import { updateDashboard } from './tools/update-dashboard.js';
14
+ import { deleteDashboard } from './tools/delete-dashboard.js';
15
+ // Insights
16
+ import { listInsights } from './tools/list-insights.js';
17
+ import { getInsight } from './tools/get-insight.js';
18
+ import { updateInsight } from './tools/update-insight.js';
19
+ import { deleteInsight } from './tools/delete-insight.js';
20
+ // Feature Flags
21
+ import { listFeatureFlags } from './tools/list-feature-flags.js';
22
+ import { getFeatureFlag } from './tools/get-feature-flag.js';
23
+ import { createFeatureFlag } from './tools/create-feature-flag.js';
24
+ import { updateFeatureFlag } from './tools/update-feature-flag.js';
25
+ import { deleteFeatureFlag } from './tools/delete-feature-flag.js';
26
+ // Experiments
27
+ import { listExperiments } from './tools/list-experiments.js';
28
+ import { getExperiment } from './tools/get-experiment.js';
29
+ import { createExperiment } from './tools/create-experiment.js';
30
+ // Annotations
31
+ import { listAnnotations } from './tools/list-annotations.js';
32
+ import { createAnnotation } from './tools/create-annotation.js';
33
+ import { deleteAnnotation } from './tools/delete-annotation.js';
34
+ // Persons
35
+ import { listPersons } from './tools/list-persons.js';
36
+ import { getPerson } from './tools/get-person.js';
37
+ // Cohorts
38
+ import { listCohorts } from './tools/list-cohorts.js';
39
+ import { getCohort } from './tools/get-cohort.js';
40
+ // Surveys
41
+ import { listSurveys } from './tools/list-surveys.js';
42
+ import { getSurvey } from './tools/get-survey.js';
43
+ // Actions
44
+ import { listActions } from './tools/list-actions.js';
45
+ import { getAction } from './tools/get-action.js';
46
+ class PostHogPlugin extends OpenTabsPlugin {
47
+ name = 'posthog';
48
+ description = 'OpenTabs plugin for PostHog';
49
+ displayName = 'PostHog';
50
+ urlPatterns = ['*://us.posthog.com/*', '*://eu.posthog.com/*'];
51
+ homepage = 'https://us.posthog.com';
52
+ tools = [
53
+ // Users & Organization
54
+ getCurrentUser,
55
+ getOrganization,
56
+ // Projects
57
+ listProjects,
58
+ getProject,
59
+ // Dashboards
60
+ listDashboards,
61
+ getDashboard,
62
+ createDashboard,
63
+ updateDashboard,
64
+ deleteDashboard,
65
+ // Insights
66
+ listInsights,
67
+ getInsight,
68
+ updateInsight,
69
+ deleteInsight,
70
+ // Feature Flags
71
+ listFeatureFlags,
72
+ getFeatureFlag,
73
+ createFeatureFlag,
74
+ updateFeatureFlag,
75
+ deleteFeatureFlag,
76
+ // Experiments
77
+ listExperiments,
78
+ getExperiment,
79
+ createExperiment,
80
+ // Annotations
81
+ listAnnotations,
82
+ createAnnotation,
83
+ deleteAnnotation,
84
+ // Persons
85
+ listPersons,
86
+ getPerson,
87
+ // Cohorts
88
+ listCohorts,
89
+ getCohort,
90
+ // Surveys
91
+ listSurveys,
92
+ getSurvey,
93
+ // Actions
94
+ listActions,
95
+ getAction,
96
+ ];
97
+ async isReady() {
98
+ if (isAuthenticated())
99
+ return true;
100
+ return waitForAuth();
101
+ }
102
+ }
103
+ export default new PostHogPlugin();
104
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export declare const isAuthenticated: () => boolean;
2
+ export declare const waitForAuth: () => Promise<boolean>;
3
+ export declare const getTeamId: () => number;
4
+ export declare const getOrgId: () => string;
5
+ /**
6
+ * PostHog uses two URL patterns:
7
+ * - /api/environments/:teamId/... for dashboards, insights, persons, events
8
+ * - /api/projects/:teamId/... for feature flags, experiments, annotations, actions, cohorts, surveys
9
+ * The teamId and projectId are interchangeable in PostHog Cloud.
10
+ */
11
+ export declare const api: <T>(endpoint: string, options?: {
12
+ method?: string;
13
+ body?: unknown;
14
+ query?: Record<string, string | number | boolean | string[] | undefined>;
15
+ }) => Promise<T>;
16
+ /**
17
+ * Soft-delete a PostHog resource. Most DELETE endpoints return 405;
18
+ * the convention is PATCH with { deleted: true }.
19
+ */
20
+ export declare const softDelete: (endpoint: string) => Promise<void>;
21
+ //# sourceMappingURL=posthog-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"posthog-api.d.ts","sourceRoot":"","sources":["../src/posthog-api.ts"],"names":[],"mappings":"AAqCA,eAAO,MAAM,eAAe,QAAO,OAA6B,CAAC;AAEjE,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,OAAO,CAOnD,CAAC;AAEF,eAAO,MAAM,SAAS,QAAO,MAI5B,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAO,MAI3B,CAAC;AAIF;;;;;GAKG;AACH,eAAO,MAAM,GAAG,GAAU,CAAC,EACzB,UAAU,MAAM,EAChB,UAAS;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;CACrE,KACL,OAAO,CAAC,CAAC,CAgCX,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAE/D,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { ToolError, fetchJSON, buildQueryString, getCookie, getPageGlobal, getAuthCache, setAuthCache, clearAuthCache, waitUntil, } from '@opentabs-dev/plugin-sdk';
2
+ const getAuth = () => {
3
+ const cached = getAuthCache('posthog');
4
+ if (cached)
5
+ return cached;
6
+ const csrfToken = getCookie('posthog_csrftoken');
7
+ if (!csrfToken)
8
+ return null;
9
+ const teamId = getPageGlobal('POSTHOG_APP_CONTEXT.current_team.id') ?? 0;
10
+ const orgId = getPageGlobal('POSTHOG_APP_CONTEXT.current_project.organization_id') ?? '';
11
+ if (!teamId)
12
+ return null;
13
+ const auth = { csrfToken, teamId, orgId };
14
+ setAuthCache('posthog', auth);
15
+ return auth;
16
+ };
17
+ export const isAuthenticated = () => getAuth() !== null;
18
+ export const waitForAuth = async () => {
19
+ try {
20
+ await waitUntil(() => isAuthenticated(), { interval: 500, timeout: 5000 });
21
+ return true;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ };
27
+ export const getTeamId = () => {
28
+ const auth = getAuth();
29
+ if (!auth)
30
+ throw ToolError.auth('Not authenticated — please log in to PostHog.');
31
+ return auth.teamId;
32
+ };
33
+ export const getOrgId = () => {
34
+ const auth = getAuth();
35
+ if (!auth)
36
+ throw ToolError.auth('Not authenticated — please log in to PostHog.');
37
+ return auth.orgId;
38
+ };
39
+ // --- API caller ---
40
+ /**
41
+ * PostHog uses two URL patterns:
42
+ * - /api/environments/:teamId/... for dashboards, insights, persons, events
43
+ * - /api/projects/:teamId/... for feature flags, experiments, annotations, actions, cohorts, surveys
44
+ * The teamId and projectId are interchangeable in PostHog Cloud.
45
+ */
46
+ export const api = async (endpoint, options = {}) => {
47
+ const auth = getAuth();
48
+ if (!auth)
49
+ throw ToolError.auth('Not authenticated — please log in to PostHog.');
50
+ const qs = options.query ? buildQueryString(options.query) : '';
51
+ const url = qs ? `${endpoint}?${qs}` : endpoint;
52
+ const method = options.method ?? 'GET';
53
+ const headers = {
54
+ Accept: 'application/json',
55
+ };
56
+ if (method !== 'GET') {
57
+ headers['X-CSRFToken'] = auth.csrfToken;
58
+ }
59
+ const init = { method, headers };
60
+ if (options.body) {
61
+ headers['Content-Type'] = 'application/json';
62
+ init.body = JSON.stringify(options.body);
63
+ }
64
+ try {
65
+ const data = await fetchJSON(url, init);
66
+ return data;
67
+ }
68
+ catch (error) {
69
+ if (error instanceof ToolError && error.category === 'auth') {
70
+ clearAuthCache('posthog');
71
+ }
72
+ throw error;
73
+ }
74
+ };
75
+ /**
76
+ * Soft-delete a PostHog resource. Most DELETE endpoints return 405;
77
+ * the convention is PATCH with { deleted: true }.
78
+ */
79
+ export const softDelete = async (endpoint) => {
80
+ await api(endpoint, { method: 'PATCH', body: { deleted: true } });
81
+ };
82
+ //# sourceMappingURL=posthog-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"posthog-api.js","sourceRoot":"","sources":["../src/posthog-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ export declare const createAnnotation: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ content: z.ZodString;
4
+ date_marker: z.ZodString;
5
+ scope: z.ZodOptional<z.ZodString>;
6
+ }, z.core.$strip>, z.ZodObject<{
7
+ annotation: z.ZodObject<{
8
+ id: z.ZodNumber;
9
+ content: z.ZodString;
10
+ date_marker: z.ZodString;
11
+ scope: z.ZodString;
12
+ created_at: z.ZodString;
13
+ created_by: z.ZodNullable<z.ZodObject<{
14
+ id: z.ZodNumber;
15
+ first_name: z.ZodString;
16
+ email: z.ZodString;
17
+ }, z.core.$strip>>;
18
+ }, z.core.$strip>;
19
+ }, z.core.$strip>>;
20
+ //# sourceMappingURL=create-annotation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-annotation.d.ts","sourceRoot":"","sources":["../../src/tools/create-annotation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;kBA0B3B,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { api, getTeamId } from '../posthog-api.js';
4
+ import { annotationSchema, mapAnnotation } from './schemas.js';
5
+ export const createAnnotation = defineTool({
6
+ name: 'create_annotation',
7
+ displayName: 'Create Annotation',
8
+ description: 'Create a new annotation to mark an important event on PostHog charts.',
9
+ summary: 'Create a new annotation',
10
+ icon: 'plus',
11
+ group: 'Annotations',
12
+ input: z.object({
13
+ content: z.string().describe('Annotation text content'),
14
+ date_marker: z.string().describe('ISO 8601 timestamp the annotation marks'),
15
+ scope: z.string().optional().describe('Annotation scope: "project" (default), "organization", or "dashboard_item"'),
16
+ }),
17
+ output: z.object({
18
+ annotation: annotationSchema.describe('The newly created annotation'),
19
+ }),
20
+ handle: async (params) => {
21
+ const body = {
22
+ content: params.content,
23
+ date_marker: params.date_marker,
24
+ };
25
+ if (params.scope !== undefined)
26
+ body.scope = params.scope;
27
+ const data = await api(`/api/projects/${getTeamId()}/annotations/`, { method: 'POST', body });
28
+ return { annotation: mapAnnotation(data) };
29
+ },
30
+ });
31
+ //# sourceMappingURL=create-annotation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-annotation.js","sourceRoot":"","sources":["../../src/tools/create-annotation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAsB,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;IACzC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,mBAAmB;IAChC,WAAW,EAAE,uEAAuE;IACpF,OAAO,EAAE,yBAAyB;IAClC,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACvD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QAC3E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4EAA4E,CAAC;KACpH,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,gBAAgB,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KACtE,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAA4B;YACpC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC;QACF,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAE1D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAgB,iBAAiB,SAAS,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7G,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7C,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { z } from 'zod';
2
+ export declare const createDashboard: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ name: z.ZodString;
4
+ description: z.ZodOptional<z.ZodString>;
5
+ pinned: z.ZodOptional<z.ZodBoolean>;
6
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
7
+ }, z.core.$strip>, z.ZodObject<{
8
+ dashboard: z.ZodObject<{
9
+ id: z.ZodNumber;
10
+ name: z.ZodString;
11
+ description: z.ZodString;
12
+ pinned: z.ZodBoolean;
13
+ created_at: z.ZodString;
14
+ created_by: z.ZodNullable<z.ZodObject<{
15
+ id: z.ZodNumber;
16
+ first_name: z.ZodString;
17
+ email: z.ZodString;
18
+ }, z.core.$strip>>;
19
+ is_shared: z.ZodBoolean;
20
+ tags: z.ZodArray<z.ZodString>;
21
+ tiles_count: z.ZodNumber;
22
+ deleted: z.ZodBoolean;
23
+ }, z.core.$strip>;
24
+ }, z.core.$strip>>;
25
+ //# sourceMappingURL=create-dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-dashboard.d.ts","sourceRoot":"","sources":["../../src/tools/create-dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;kBAuB1B,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { api, getTeamId } from '../posthog-api.js';
4
+ import { dashboardSchema, mapDashboard } from './schemas.js';
5
+ export const createDashboard = defineTool({
6
+ name: 'create_dashboard',
7
+ displayName: 'Create Dashboard',
8
+ description: 'Create a new dashboard in the current PostHog project.',
9
+ summary: 'Create a new dashboard',
10
+ icon: 'plus',
11
+ group: 'Dashboards',
12
+ input: z.object({
13
+ name: z.string().describe('Dashboard name'),
14
+ description: z.string().optional().describe('Dashboard description'),
15
+ pinned: z.boolean().optional().describe('Whether to pin the dashboard'),
16
+ tags: z.array(z.string()).optional().describe('Tags to attach'),
17
+ }),
18
+ output: z.object({
19
+ dashboard: dashboardSchema.describe('The created dashboard'),
20
+ }),
21
+ handle: async (params) => {
22
+ const data = await api(`/api/environments/${getTeamId()}/dashboards/`, {
23
+ method: 'POST',
24
+ body: params,
25
+ });
26
+ return { dashboard: mapDashboard(data) };
27
+ },
28
+ });
29
+ //# sourceMappingURL=create-dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-dashboard.js","sourceRoot":"","sources":["../../src/tools/create-dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAqB,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEhF,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;IACxC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EAAE,wDAAwD;IACrE,OAAO,EAAE,wBAAwB;IACjC,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACpE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACvE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;KAChE,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KAC7D,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAe,qBAAqB,SAAS,EAAE,cAAc,EAAE;YACnF,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3C,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod';
2
+ export declare const createExperiment: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ name: z.ZodString;
4
+ description: z.ZodOptional<z.ZodString>;
5
+ feature_flag_key: z.ZodString;
6
+ }, z.core.$strip>, z.ZodObject<{
7
+ experiment: z.ZodObject<{
8
+ id: z.ZodNumber;
9
+ name: z.ZodString;
10
+ description: z.ZodString;
11
+ start_date: z.ZodNullable<z.ZodString>;
12
+ end_date: z.ZodNullable<z.ZodString>;
13
+ feature_flag_key: z.ZodString;
14
+ created_at: z.ZodString;
15
+ created_by: z.ZodNullable<z.ZodObject<{
16
+ id: z.ZodNumber;
17
+ first_name: z.ZodString;
18
+ email: z.ZodString;
19
+ }, z.core.$strip>>;
20
+ type: z.ZodString;
21
+ }, z.core.$strip>;
22
+ }, z.core.$strip>>;
23
+ //# sourceMappingURL=create-experiment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-experiment.d.ts","sourceRoot":"","sources":["../../src/tools/create-experiment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;kBA0B3B,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { api, getTeamId } from '../posthog-api.js';
4
+ import { experimentSchema, mapExperiment } from './schemas.js';
5
+ export const createExperiment = defineTool({
6
+ name: 'create_experiment',
7
+ displayName: 'Create Experiment',
8
+ description: 'Create a new A/B test experiment. Requires a name and feature flag key.',
9
+ summary: 'Create a new experiment',
10
+ icon: 'plus',
11
+ group: 'Experiments',
12
+ input: z.object({
13
+ name: z.string().describe('Experiment name'),
14
+ description: z.string().optional().describe('Description'),
15
+ feature_flag_key: z.string().describe('Key for the associated feature flag'),
16
+ }),
17
+ output: z.object({
18
+ experiment: experimentSchema.describe('The newly created experiment'),
19
+ }),
20
+ handle: async (params) => {
21
+ const body = {
22
+ name: params.name,
23
+ feature_flag_key: params.feature_flag_key,
24
+ };
25
+ if (params.description !== undefined)
26
+ body.description = params.description;
27
+ const data = await api(`/api/projects/${getTeamId()}/experiments/`, { method: 'POST', body });
28
+ return { experiment: mapExperiment(data) };
29
+ },
30
+ });
31
+ //# sourceMappingURL=create-experiment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-experiment.js","sourceRoot":"","sources":["../../src/tools/create-experiment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAsB,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;IACzC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,mBAAmB;IAChC,WAAW,EAAE,yEAAyE;IACtF,OAAO,EAAE,yBAAyB;IAClC,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC5C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC1D,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAC7E,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,gBAAgB,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KACtE,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAA4B;YACpC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;SAC1C,CAAC;QACF,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;YAAE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAE5E,MAAM,IAAI,GAAG,MAAM,GAAG,CAAgB,iBAAiB,SAAS,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7G,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7C,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod';
2
+ export declare const createFeatureFlag: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ key: z.ZodString;
4
+ name: z.ZodOptional<z.ZodString>;
5
+ active: z.ZodOptional<z.ZodBoolean>;
6
+ rollout_percentage: z.ZodOptional<z.ZodNumber>;
7
+ ensure_experience_continuity: z.ZodOptional<z.ZodBoolean>;
8
+ }, z.core.$strip>, z.ZodObject<{
9
+ feature_flag: z.ZodObject<{
10
+ id: z.ZodNumber;
11
+ key: z.ZodString;
12
+ name: z.ZodString;
13
+ active: z.ZodBoolean;
14
+ deleted: z.ZodBoolean;
15
+ ensure_experience_continuity: z.ZodBoolean;
16
+ rollout_percentage: z.ZodNullable<z.ZodNumber>;
17
+ tags: z.ZodArray<z.ZodString>;
18
+ created_at: z.ZodString;
19
+ created_by: z.ZodNullable<z.ZodObject<{
20
+ id: z.ZodNumber;
21
+ first_name: z.ZodString;
22
+ email: z.ZodString;
23
+ }, z.core.$strip>>;
24
+ }, z.core.$strip>;
25
+ }, z.core.$strip>>;
26
+ //# sourceMappingURL=create-feature-flag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-feature-flag.d.ts","sourceRoot":"","sources":["../../src/tools/create-feature-flag.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;kBAwC5B,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { api, getTeamId } from '../posthog-api.js';
4
+ import { featureFlagSchema, mapFeatureFlag } from './schemas.js';
5
+ export const createFeatureFlag = defineTool({
6
+ name: 'create_feature_flag',
7
+ displayName: 'Create Feature Flag',
8
+ description: 'Create a new boolean feature flag. The key must be unique within the project and is used in code to check the flag.',
9
+ summary: 'Create a new feature flag',
10
+ icon: 'plus',
11
+ group: 'Feature Flags',
12
+ input: z.object({
13
+ key: z.string().describe('Unique flag key (used in code)'),
14
+ name: z.string().optional().describe('Human-readable name'),
15
+ active: z.boolean().optional().describe('Whether to activate immediately (default false)'),
16
+ rollout_percentage: z
17
+ .number()
18
+ .int()
19
+ .min(0)
20
+ .max(100)
21
+ .optional()
22
+ .describe('Percentage of users to roll out to (0-100)'),
23
+ ensure_experience_continuity: z.boolean().optional().describe('Persist flag value per user'),
24
+ }),
25
+ output: z.object({
26
+ feature_flag: featureFlagSchema.describe('The newly created feature flag'),
27
+ }),
28
+ handle: async (params) => {
29
+ const body = { key: params.key };
30
+ if (params.name !== undefined)
31
+ body.name = params.name;
32
+ if (params.active !== undefined)
33
+ body.active = params.active;
34
+ if (params.ensure_experience_continuity !== undefined)
35
+ body.ensure_experience_continuity = params.ensure_experience_continuity;
36
+ if (params.rollout_percentage !== undefined) {
37
+ body.filters = {
38
+ groups: [{ rollout_percentage: params.rollout_percentage, properties: [] }],
39
+ };
40
+ }
41
+ const data = await api(`/api/projects/${getTeamId()}/feature_flags/`, { method: 'POST', body });
42
+ return { feature_flag: mapFeatureFlag(data) };
43
+ },
44
+ });
45
+ //# sourceMappingURL=create-feature-flag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-feature-flag.js","sourceRoot":"","sources":["../../src/tools/create-feature-flag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAuB,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEtF,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;IAC1C,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,qBAAqB;IAClC,WAAW,EACT,qHAAqH;IACvH,OAAO,EAAE,2BAA2B;IACpC,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,eAAe;IACtB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC1D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC3D,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;QAC1F,kBAAkB,EAAE,CAAC;aAClB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,GAAG,CAAC;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,4CAA4C,CAAC;QACzD,4BAA4B,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KAC7F,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,YAAY,EAAE,iBAAiB,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAC3E,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAA4B,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;QAC1D,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACvD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7D,IAAI,MAAM,CAAC,4BAA4B,KAAK,SAAS;YACnD,IAAI,CAAC,4BAA4B,GAAG,MAAM,CAAC,4BAA4B,CAAC;QAC1E,IAAI,MAAM,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAC5C,IAAI,CAAC,OAAO,GAAG;gBACb,MAAM,EAAE,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;aAC5E,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAiB,iBAAiB,SAAS,EAAE,iBAAiB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhH,OAAO,EAAE,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IAChD,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ export declare const deleteAnnotation: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ annotation_id: z.ZodNumber;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ success: z.ZodBoolean;
6
+ }, z.core.$strip>>;
7
+ //# sourceMappingURL=delete-annotation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-annotation.d.ts","sourceRoot":"","sources":["../../src/tools/delete-annotation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,gBAAgB;;;;kBAiB3B,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { getTeamId, softDelete } from '../posthog-api.js';
4
+ export const deleteAnnotation = defineTool({
5
+ name: 'delete_annotation',
6
+ displayName: 'Delete Annotation',
7
+ description: 'Delete an annotation by marking it as deleted (soft delete).',
8
+ summary: 'Delete an annotation',
9
+ icon: 'trash-2',
10
+ group: 'Annotations',
11
+ input: z.object({
12
+ annotation_id: z.number().int().describe('Annotation ID to delete'),
13
+ }),
14
+ output: z.object({
15
+ success: z.boolean().describe('Whether the deletion succeeded'),
16
+ }),
17
+ handle: async (params) => {
18
+ await softDelete(`/api/projects/${getTeamId()}/annotations/${params.annotation_id}/`);
19
+ return { success: true };
20
+ },
21
+ });
22
+ //# sourceMappingURL=delete-annotation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-annotation.js","sourceRoot":"","sources":["../../src/tools/delete-annotation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;IACzC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,mBAAmB;IAChC,WAAW,EAAE,8DAA8D;IAC3E,OAAO,EAAE,sBAAsB;IAC/B,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KACpE,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAChE,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,UAAU,CAAC,iBAAiB,SAAS,EAAE,gBAAgB,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC;QACtF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ export declare const deleteDashboard: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ dashboard_id: z.ZodNumber;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ success: z.ZodBoolean;
6
+ }, z.core.$strip>>;
7
+ //# sourceMappingURL=delete-dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-dashboard.d.ts","sourceRoot":"","sources":["../../src/tools/delete-dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,eAAe;;;;kBAiB1B,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { getTeamId, softDelete } from '../posthog-api.js';
4
+ export const deleteDashboard = defineTool({
5
+ name: 'delete_dashboard',
6
+ displayName: 'Delete Dashboard',
7
+ description: 'Delete a dashboard by marking it as deleted (soft delete). The dashboard can potentially be recovered.',
8
+ summary: 'Delete a dashboard',
9
+ icon: 'trash-2',
10
+ group: 'Dashboards',
11
+ input: z.object({
12
+ dashboard_id: z.number().int().describe('Dashboard ID to delete'),
13
+ }),
14
+ output: z.object({
15
+ success: z.boolean().describe('Whether the deletion succeeded'),
16
+ }),
17
+ handle: async (params) => {
18
+ await softDelete(`/api/environments/${getTeamId()}/dashboards/${params.dashboard_id}/`);
19
+ return { success: true };
20
+ },
21
+ });
22
+ //# sourceMappingURL=delete-dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-dashboard.js","sourceRoot":"","sources":["../../src/tools/delete-dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;IACxC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EAAE,wGAAwG;IACrH,OAAO,EAAE,oBAAoB;IAC7B,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;KAClE,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAChE,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,UAAU,CAAC,qBAAqB,SAAS,EAAE,eAAe,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;QACxF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ export declare const deleteFeatureFlag: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ flag_id: z.ZodNumber;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ success: z.ZodBoolean;
6
+ }, z.core.$strip>>;
7
+ //# sourceMappingURL=delete-feature-flag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-feature-flag.d.ts","sourceRoot":"","sources":["../../src/tools/delete-feature-flag.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,iBAAiB;;;;kBAiB5B,CAAC"}