@redplanethq/corebrain 2.5.7 → 2.5.8
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.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notion.d.ts","sourceRoot":"","sources":["../../../src/commands/load/notion.tsx"],"names":[],"mappings":"AAIA,OAAO,GAAG,MAAM,KAAK,CAAC;AAMtB,eAAO,MAAM,OAAO,oCAAiB,CAAC;AAEtC,KAAK,KAAK,GAAG;IACZ,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CACnC,CAAC;AAwUF,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,MAAM,EAAE,KAAK,QAc/C"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { useApp } from 'ink';
|
|
3
|
+
import * as p from '@clack/prompts';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import zod from 'zod';
|
|
6
|
+
import { CoreClient } from '@redplanethq/sdk';
|
|
7
|
+
import { getConfig } from '../../config/index.js';
|
|
8
|
+
const BASE_URL = 'https://app.getcore.me';
|
|
9
|
+
export const options = zod.object({});
|
|
10
|
+
function extractActionText(result) {
|
|
11
|
+
const r = result;
|
|
12
|
+
if (r?.content?.[0]?.text)
|
|
13
|
+
return r.content[0].text;
|
|
14
|
+
if (typeof r === 'string')
|
|
15
|
+
return r;
|
|
16
|
+
return '';
|
|
17
|
+
}
|
|
18
|
+
function parseSearchResult(text) {
|
|
19
|
+
if (!text || text === 'No results found')
|
|
20
|
+
return { pages: [] };
|
|
21
|
+
const pages = [];
|
|
22
|
+
let nextCursor;
|
|
23
|
+
const blocks = text.split('\n\n').filter(Boolean);
|
|
24
|
+
for (const block of blocks) {
|
|
25
|
+
if (block.startsWith('Found '))
|
|
26
|
+
continue;
|
|
27
|
+
if (block.startsWith('next_cursor: ')) {
|
|
28
|
+
nextCursor = block.slice('next_cursor: '.length).trim();
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const lines = block.split('\n');
|
|
32
|
+
const idLine = lines.find(l => l.startsWith('ID: '));
|
|
33
|
+
const titleLine = lines.find(l => l.startsWith('Title: '));
|
|
34
|
+
const urlLine = lines.find(l => l.startsWith('URL: '));
|
|
35
|
+
const createdLine = lines.find(l => l.startsWith('Created: '));
|
|
36
|
+
const lastEditedLine = lines.find(l => l.startsWith('Last edited: '));
|
|
37
|
+
if (!idLine)
|
|
38
|
+
continue;
|
|
39
|
+
pages.push({
|
|
40
|
+
id: idLine.slice(4).trim(),
|
|
41
|
+
title: titleLine?.slice(7).trim() || 'Untitled',
|
|
42
|
+
url: urlLine?.slice(5).trim() || '',
|
|
43
|
+
createdAt: createdLine?.slice(9).trim() || new Date().toISOString(),
|
|
44
|
+
lastEditedAt: lastEditedLine?.slice(13).trim() || new Date().toISOString(),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return { pages, nextCursor };
|
|
48
|
+
}
|
|
49
|
+
async function fetchPagesViaAction(client, accountId, cursor) {
|
|
50
|
+
const parameters = {
|
|
51
|
+
filter: { value: 'page', property: 'object' },
|
|
52
|
+
page_size: 10,
|
|
53
|
+
};
|
|
54
|
+
if (cursor)
|
|
55
|
+
parameters.start_cursor = cursor;
|
|
56
|
+
const { result } = await client.executeIntegrationAction({
|
|
57
|
+
accountId,
|
|
58
|
+
action: 'notion_search',
|
|
59
|
+
parameters,
|
|
60
|
+
});
|
|
61
|
+
return parseSearchResult(extractActionText(result));
|
|
62
|
+
}
|
|
63
|
+
async function fetchPageContentViaAction(client, accountId, pageId) {
|
|
64
|
+
const { result } = await client.executeIntegrationAction({
|
|
65
|
+
accountId,
|
|
66
|
+
action: 'notion_get_page',
|
|
67
|
+
parameters: { page_id: pageId },
|
|
68
|
+
});
|
|
69
|
+
const text = extractActionText(result);
|
|
70
|
+
try {
|
|
71
|
+
const data = JSON.parse(text);
|
|
72
|
+
return data.text || data.title || '';
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return text;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async function runNotionLoad() {
|
|
79
|
+
p.intro(chalk.bgCyan(chalk.black(' Load Notion ')));
|
|
80
|
+
const config = getConfig();
|
|
81
|
+
const apiKey = config.auth?.apiKey;
|
|
82
|
+
const baseUrl = config.auth?.url || BASE_URL;
|
|
83
|
+
if (!apiKey) {
|
|
84
|
+
p.log.error('Not authenticated. Run `corebrain login` first.');
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const client = new CoreClient({ baseUrl, token: apiKey });
|
|
88
|
+
const spinner = p.spinner();
|
|
89
|
+
// 1. Check Notion connection
|
|
90
|
+
spinner.start('Checking Notion connection...');
|
|
91
|
+
let notionAccountId;
|
|
92
|
+
try {
|
|
93
|
+
const res = (await client.getIntegrationsConnected());
|
|
94
|
+
const notionAccount = (res.accounts ?? []).find((a) => a.integrationDefinition?.slug === 'notion');
|
|
95
|
+
if (!notionAccount) {
|
|
96
|
+
spinner.stop(chalk.red('Notion not connected'));
|
|
97
|
+
p.log.error('Notion is not connected. Please connect it at ' +
|
|
98
|
+
chalk.cyan(`${baseUrl}/home/integrations`));
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
notionAccountId = notionAccount.id;
|
|
102
|
+
spinner.stop(chalk.green('Notion connected'));
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
spinner.stop(chalk.red('Failed to fetch integrations'));
|
|
106
|
+
p.log.error(err instanceof Error ? err.message : 'Unknown error');
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// 2. Choose load mode
|
|
110
|
+
const loadMode = await p.select({
|
|
111
|
+
message: 'How would you like to load Notion pages?',
|
|
112
|
+
options: [
|
|
113
|
+
{
|
|
114
|
+
value: 'select',
|
|
115
|
+
label: 'Select pages',
|
|
116
|
+
hint: 'Fetch pages first, then choose which to load',
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
value: 'all',
|
|
120
|
+
label: 'Load all pages',
|
|
121
|
+
hint: 'Load every page in your workspace',
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
});
|
|
125
|
+
if (p.isCancel(loadMode)) {
|
|
126
|
+
p.cancel('Cancelled');
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
let pagesToLoad = [];
|
|
130
|
+
const FETCH_MORE = '__fetch_more__';
|
|
131
|
+
if (loadMode === 'all') {
|
|
132
|
+
const confirmed = await p.confirm({
|
|
133
|
+
message: chalk.yellow('Loading all pages will consume a significant amount of credits. Continue?'),
|
|
134
|
+
initialValue: false,
|
|
135
|
+
});
|
|
136
|
+
if (p.isCancel(confirmed) || !confirmed) {
|
|
137
|
+
p.cancel('Cancelled');
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
spinner.start('Fetching Notion pages...');
|
|
141
|
+
let cursor;
|
|
142
|
+
try {
|
|
143
|
+
do {
|
|
144
|
+
const batch = await fetchPagesViaAction(client, notionAccountId, cursor);
|
|
145
|
+
pagesToLoad.push(...batch.pages);
|
|
146
|
+
cursor = batch.nextCursor;
|
|
147
|
+
if (cursor) {
|
|
148
|
+
spinner.message(`Fetching more pages (${pagesToLoad.length} so far)...`);
|
|
149
|
+
}
|
|
150
|
+
} while (cursor);
|
|
151
|
+
spinner.stop(chalk.green(`Found ${pagesToLoad.length} pages`));
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
spinner.stop(chalk.red('Failed to fetch pages'));
|
|
155
|
+
p.log.error(err instanceof Error ? err.message : 'Unknown error');
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
// Fetch first batch
|
|
161
|
+
spinner.start('Fetching Notion pages...');
|
|
162
|
+
let allFetched = [];
|
|
163
|
+
let nextCursor;
|
|
164
|
+
try {
|
|
165
|
+
const first = await fetchPagesViaAction(client, notionAccountId);
|
|
166
|
+
allFetched = first.pages;
|
|
167
|
+
nextCursor = first.nextCursor;
|
|
168
|
+
spinner.stop(chalk.green(`Fetched ${allFetched.length} pages`));
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
spinner.stop(chalk.red('Failed to fetch pages'));
|
|
172
|
+
p.log.error(err instanceof Error ? err.message : 'Unknown error');
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (allFetched.length === 0) {
|
|
176
|
+
p.log.warn('No pages found in your Notion workspace.');
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
let currentSelections = [];
|
|
180
|
+
while (true) {
|
|
181
|
+
const selectOptions = allFetched.map(page => ({
|
|
182
|
+
value: page.id,
|
|
183
|
+
label: page.title,
|
|
184
|
+
hint: page.url,
|
|
185
|
+
}));
|
|
186
|
+
if (nextCursor) {
|
|
187
|
+
selectOptions.push({
|
|
188
|
+
value: FETCH_MORE,
|
|
189
|
+
label: '↓ Fetch more pages',
|
|
190
|
+
hint: 'Load the next 10 pages',
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
const selected = await p.multiselect({
|
|
194
|
+
message: `Select pages to load (${allFetched.length} fetched)`,
|
|
195
|
+
options: selectOptions,
|
|
196
|
+
initialValues: currentSelections,
|
|
197
|
+
required: false,
|
|
198
|
+
});
|
|
199
|
+
if (p.isCancel(selected)) {
|
|
200
|
+
p.cancel('Cancelled');
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
const selectedArr = selected;
|
|
204
|
+
if (selectedArr.includes(FETCH_MORE)) {
|
|
205
|
+
currentSelections = selectedArr.filter(id => id !== FETCH_MORE);
|
|
206
|
+
spinner.start('Fetching more pages...');
|
|
207
|
+
try {
|
|
208
|
+
const more = await fetchPagesViaAction(client, notionAccountId, nextCursor);
|
|
209
|
+
allFetched = [...allFetched, ...more.pages];
|
|
210
|
+
nextCursor = more.nextCursor;
|
|
211
|
+
spinner.stop(chalk.green(`Fetched ${allFetched.length} pages total`));
|
|
212
|
+
}
|
|
213
|
+
catch (err) {
|
|
214
|
+
spinner.stop(chalk.red('Failed to fetch more pages'));
|
|
215
|
+
p.log.error(err instanceof Error ? err.message : 'Unknown error');
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
pagesToLoad = allFetched.filter(page => selectedArr.includes(page.id));
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (pagesToLoad.length === 0) {
|
|
226
|
+
p.log.warn('No pages selected.');
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
// 3. Ingest pages
|
|
230
|
+
p.log.info(`Ingesting ${pagesToLoad.length} page(s) into Core...`);
|
|
231
|
+
let successCount = 0;
|
|
232
|
+
let failCount = 0;
|
|
233
|
+
for (const page of pagesToLoad) {
|
|
234
|
+
spinner.start(`Loading "${page.title}"...`);
|
|
235
|
+
try {
|
|
236
|
+
const content = await fetchPageContentViaAction(client, notionAccountId, page.id);
|
|
237
|
+
await client.ingest({
|
|
238
|
+
episodeBody: content || `Notion page: ${page.title}`,
|
|
239
|
+
source: 'notion',
|
|
240
|
+
referenceTime: page.lastEditedAt,
|
|
241
|
+
sessionId: page.id,
|
|
242
|
+
title: page.title,
|
|
243
|
+
type: 'DOCUMENT',
|
|
244
|
+
metadata: {
|
|
245
|
+
url: page.url,
|
|
246
|
+
},
|
|
247
|
+
});
|
|
248
|
+
spinner.stop(chalk.green(`✓ ${page.title}`));
|
|
249
|
+
successCount++;
|
|
250
|
+
}
|
|
251
|
+
catch (err) {
|
|
252
|
+
spinner.stop(chalk.red(`✗ ${page.title}: ${err instanceof Error ? err.message : 'Unknown error'}`));
|
|
253
|
+
failCount++;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
p.outro(failCount === 0
|
|
257
|
+
? chalk.green(`Successfully loaded ${successCount} page(s) into Core.`)
|
|
258
|
+
: chalk.yellow(`Loaded ${successCount} page(s), ${failCount} failed.`));
|
|
259
|
+
}
|
|
260
|
+
export default function LoadNotion(_props) {
|
|
261
|
+
const { exit } = useApp();
|
|
262
|
+
useEffect(() => {
|
|
263
|
+
runNotionLoad()
|
|
264
|
+
.catch(err => {
|
|
265
|
+
p.log.error(err instanceof Error ? err.message : 'Unknown error');
|
|
266
|
+
})
|
|
267
|
+
.finally(() => {
|
|
268
|
+
setTimeout(() => exit(), 100);
|
|
269
|
+
});
|
|
270
|
+
}, [exit]);
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=notion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notion.js","sourceRoot":"","sources":["../../../src/commands/load/notion.tsx"],"names":[],"mappings":"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"}
|