aui-agent-builder 0.3.55 → 0.3.57
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.
- package/dist/api-client/index.d.ts +0 -4
- package/dist/api-client/index.d.ts.map +1 -1
- package/dist/api-client/index.js +2 -34
- package/dist/api-client/index.js.map +1 -1
- package/dist/api-client/kb-view-client.d.ts +22 -1
- package/dist/api-client/kb-view-client.d.ts.map +1 -1
- package/dist/api-client/kb-view-client.js +73 -5
- package/dist/api-client/kb-view-client.js.map +1 -1
- package/dist/commands/import-agent.js +1 -5
- package/dist/commands/import-agent.js.map +1 -1
- package/dist/commands/pull-agent.js +1 -7
- package/dist/commands/pull-agent.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +89 -272
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +0 -1
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/version.d.ts.map +1 -1
- package/dist/commands/version.js +47 -0
- package/dist/commands/version.js.map +1 -1
- package/dist/services/diff.service.d.ts.map +1 -1
- package/dist/services/diff.service.js +2 -7
- package/dist/services/diff.service.js.map +1 -1
- package/dist/services/pull-schema.service.d.ts.map +1 -1
- package/dist/services/pull-schema.service.js +0 -2
- package/dist/services/pull-schema.service.js.map +1 -1
- package/dist/types/agent.d.ts +0 -1
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/tool.d.ts +3 -0
- package/dist/types/tool.d.ts.map +1 -1
- package/dist/types/widget.d.ts +1 -3
- package/dist/types/widget.d.ts.map +1 -1
- package/dist/types/widget.js +1 -1
- package/dist/ui/views/PullAgentView.d.ts +0 -1
- package/dist/ui/views/PullAgentView.d.ts.map +1 -1
- package/dist/ui/views/PullAgentView.js +1 -1
- package/dist/ui/views/PullAgentView.js.map +1 -1
- package/dist/utils/git.d.ts +1 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +15 -2
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +0 -10
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/request-capture.d.ts +2 -0
- package/dist/utils/request-capture.d.ts.map +1 -1
- package/dist/utils/request-capture.js +13 -1
- package/dist/utils/request-capture.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/push.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import * as fs from "fs";
|
|
3
3
|
import * as path from "path";
|
|
4
|
-
import * as crypto from "crypto";
|
|
5
4
|
import { render } from "ink";
|
|
6
5
|
import { Box, Text } from "ink";
|
|
7
6
|
import inquirer from "inquirer";
|
|
@@ -14,7 +13,7 @@ import { getItemLevelDiff } from "../utils/git.js";
|
|
|
14
13
|
import { AuthenticationError, ConfigError, ValidationError } from "../errors/index.js";
|
|
15
14
|
import { StatusLine, Spinner, ErrorDisplay, Hint, } from "../ui/components/index.js";
|
|
16
15
|
import { colors, icons } from "../ui/theme.js";
|
|
17
|
-
import { PushFileSummary, PushChangesView,
|
|
16
|
+
import { PushFileSummary, PushChangesView, PushTaskLine, PushFinalSummary, } from "../ui/views/PushView.js";
|
|
18
17
|
import { isJsonMode, outputJson, stderrLog } from "../utils/json-output.js";
|
|
19
18
|
// ─── Ink Rendering Helpers ───
|
|
20
19
|
function log(node) {
|
|
@@ -124,8 +123,6 @@ async function _push(pushSpan, agentCode, options = {}) {
|
|
|
124
123
|
type = "integrations";
|
|
125
124
|
else if (parsed.rules)
|
|
126
125
|
type = "rules";
|
|
127
|
-
else if (parsed.widgets)
|
|
128
|
-
type = "widgets";
|
|
129
126
|
fileData.push({ file: relativePath, type, data: parsed });
|
|
130
127
|
}
|
|
131
128
|
if (json)
|
|
@@ -171,7 +168,8 @@ async function _push(pushSpan, agentCode, options = {}) {
|
|
|
171
168
|
file: change.file,
|
|
172
169
|
status: change.status,
|
|
173
170
|
};
|
|
174
|
-
if (change.status === "modified" || change.status === "added")
|
|
171
|
+
if ((change.status === "modified" || change.status === "added") &&
|
|
172
|
+
!change.file.startsWith("knowledge-hubs/")) {
|
|
175
173
|
const arrayFileInfo = getArrayFileInfoForPush(change.file, projectRoot);
|
|
176
174
|
if (arrayFileInfo) {
|
|
177
175
|
const itemChanges = getItemDiff(projectRoot, change.file, arrayFileInfo.arrayKey, arrayFileInfo.itemKey);
|
|
@@ -234,7 +232,7 @@ async function _push(pushSpan, agentCode, options = {}) {
|
|
|
234
232
|
log(_jsx(Box, { paddingX: 1, children: _jsx(StatusLine, { kind: "muted", label: "Dry run \u2014 no changes pushed." }) }));
|
|
235
233
|
return;
|
|
236
234
|
}
|
|
237
|
-
// ─── Push integrations before
|
|
235
|
+
// ─── Push integrations before KB ───
|
|
238
236
|
// Integrations must be created/updated first, since knowledge hub
|
|
239
237
|
// uploads depend on the integration's knowledge base already existing.
|
|
240
238
|
let integrationsAlreadyPushed = false;
|
|
@@ -288,71 +286,8 @@ async function _push(pushSpan, agentCode, options = {}) {
|
|
|
288
286
|
}
|
|
289
287
|
}
|
|
290
288
|
}
|
|
291
|
-
// ───
|
|
292
|
-
const
|
|
293
|
-
if (ragFiles.total > 0) {
|
|
294
|
-
const ragStats = {
|
|
295
|
-
newFiles: ragFiles.newFiles,
|
|
296
|
-
changedFiles: ragFiles.changedFiles,
|
|
297
|
-
unchangedFiles: ragFiles.unchangedFiles,
|
|
298
|
-
urlSources: ragFiles.urlSources,
|
|
299
|
-
};
|
|
300
|
-
log(_jsx(PushRagSummary, { stats: ragStats }));
|
|
301
|
-
const { loadKbmApiKey } = await import("../config/index.js");
|
|
302
|
-
const kbmKey = loadKbmApiKey();
|
|
303
|
-
const session = (await import("../config/index.js")).loadSession();
|
|
304
|
-
if (kbmKey && session?.network_id && session?.user_id) {
|
|
305
|
-
const { RAGClient } = await import("../api-client/rag-client.js");
|
|
306
|
-
const ragClient = new RAGClient(kbmKey);
|
|
307
|
-
const pendingUploads = ragFiles.pendingFiles || [];
|
|
308
|
-
const pendingUrls = ragFiles.pendingUrls || [];
|
|
309
|
-
if (pendingUploads.length > 0) {
|
|
310
|
-
const ragSpinner = startSpinner(`Uploading ${pendingUploads.length} RAG file(s)...`);
|
|
311
|
-
try {
|
|
312
|
-
for (const upload of pendingUploads) {
|
|
313
|
-
await ragClient.uploadFiles({
|
|
314
|
-
filePaths: [upload.path],
|
|
315
|
-
createdBy: session.user_id,
|
|
316
|
-
scopeType: "NETWORK",
|
|
317
|
-
networkId: session.network_id,
|
|
318
|
-
knowledgeBaseId: upload.kbId,
|
|
319
|
-
knowledgeBaseName: upload.kbName,
|
|
320
|
-
});
|
|
321
|
-
}
|
|
322
|
-
ragSpinner.succeed(`${pendingUploads.length} RAG file(s) uploaded`);
|
|
323
|
-
}
|
|
324
|
-
catch (error) {
|
|
325
|
-
ragSpinner.fail("RAG file upload failed");
|
|
326
|
-
log(_jsx(ErrorDisplay, { error: error }));
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
if (pendingUrls.length > 0) {
|
|
330
|
-
const urlSpinner = startSpinner(`Scraping ${pendingUrls.length} URL(s)...`);
|
|
331
|
-
try {
|
|
332
|
-
for (const urlUpload of pendingUrls) {
|
|
333
|
-
await ragClient.uploadWebsites({
|
|
334
|
-
urls: [{ url: urlUpload.url }],
|
|
335
|
-
createdBy: session.user_id,
|
|
336
|
-
scopeType: "NETWORK",
|
|
337
|
-
networkId: session.network_id,
|
|
338
|
-
knowledgeBaseId: urlUpload.kbId,
|
|
339
|
-
knowledgeBaseName: urlUpload.kbName,
|
|
340
|
-
});
|
|
341
|
-
}
|
|
342
|
-
urlSpinner.succeed(`${pendingUrls.length} URL(s) submitted for scraping`);
|
|
343
|
-
}
|
|
344
|
-
catch (error) {
|
|
345
|
-
urlSpinner.fail("URL scraping failed");
|
|
346
|
-
log(_jsx(ErrorDisplay, { error: error }));
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
else if (!kbmKey) {
|
|
351
|
-
log(_jsx(Box, { paddingX: 1, children: _jsx(Hint, { message: "RAG API key not set. Run", command: "aui rag" }) }));
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
// ─── Knowledge Hubs Push ───
|
|
355
|
-
const { getKnowledgeHubChanges, getBaselineRawContent } = await import("../utils/git.js");
|
|
289
|
+
// ─── Knowledge Hubs Push (full files) ───
|
|
290
|
+
const { getKnowledgeHubChanges } = await import("../utils/git.js");
|
|
356
291
|
const kbChanges = getKnowledgeHubChanges(projectRoot);
|
|
357
292
|
if (kbChanges.length > 0) {
|
|
358
293
|
const kbConfig = getConfig();
|
|
@@ -360,7 +295,7 @@ async function _push(pushSpan, agentCode, options = {}) {
|
|
|
360
295
|
const kbNetworkId = projectConfig.agent_id || kbSession?.network_id;
|
|
361
296
|
if (kbNetworkId && kbConfig.authToken) {
|
|
362
297
|
const { KBViewClient } = await import("../api-client/kb-view-client.js");
|
|
363
|
-
const {
|
|
298
|
+
const { buildScope, readKbFolder } = await import("../services/kb-view.service.js");
|
|
364
299
|
const { loadAgentSettingsApiKey: loadAsKey } = await import("../config/index.js");
|
|
365
300
|
const kbViewClient = new KBViewClient({
|
|
366
301
|
authToken: kbConfig.authToken,
|
|
@@ -377,111 +312,108 @@ async function _push(pushSpan, agentCode, options = {}) {
|
|
|
377
312
|
accountId: projectConfig.account_id || kbConfig.accountId || "",
|
|
378
313
|
});
|
|
379
314
|
const userId = kbSession?.user_id || "cli";
|
|
380
|
-
//
|
|
381
|
-
const
|
|
315
|
+
// Collect all changed KB directories (skip root-level files)
|
|
316
|
+
const changedKBDirs = new Set();
|
|
382
317
|
for (const change of kbChanges) {
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
}
|
|
387
|
-
// Warn about deletions
|
|
388
|
-
const deletions = kbChanges.filter((c) => c.status === "deleted");
|
|
389
|
-
for (const del of deletions) {
|
|
390
|
-
log(_jsx(Box, { paddingX: 1, children: _jsx(StatusLine, { kind: "warning", label: `Deletion detected: ${del.file} — please delete via the UI` }) }));
|
|
318
|
+
if (change.kbDirName) {
|
|
319
|
+
changedKBDirs.add(change.kbDirName);
|
|
320
|
+
}
|
|
391
321
|
}
|
|
392
|
-
//
|
|
393
|
-
const
|
|
394
|
-
const
|
|
395
|
-
//
|
|
396
|
-
|
|
397
|
-
|
|
322
|
+
// Split into existing (will upload) and deleted (will delete from server)
|
|
323
|
+
const existingKBDirs = [...changedKBDirs].filter((d) => fs.existsSync(path.join(projectRoot, "knowledge-hubs", d)));
|
|
324
|
+
const deletedKBDirs = [...changedKBDirs].filter((d) => !fs.existsSync(path.join(projectRoot, "knowledge-hubs", d)));
|
|
325
|
+
// Delete KBs that were removed locally
|
|
326
|
+
let kbDeleteSucceeded = true;
|
|
327
|
+
if (deletedKBDirs.length > 0) {
|
|
328
|
+
const { getBaselineFileContent } = await import("../utils/git.js");
|
|
329
|
+
const deleteSpinner = startSpinner(`Deleting ${deletedKBDirs.length} knowledge base(s) from server...`);
|
|
398
330
|
try {
|
|
399
|
-
for (const
|
|
400
|
-
const
|
|
401
|
-
const
|
|
402
|
-
|
|
331
|
+
for (const kbDirName of deletedKBDirs) {
|
|
332
|
+
const baselineKb = getBaselineFileContent(projectRoot, `knowledge-hubs/${kbDirName}/kb.json`);
|
|
333
|
+
const kbName = baselineKb?.name || kbDirName;
|
|
334
|
+
const kbId = baselineKb?.knowledge_base_id;
|
|
335
|
+
if (!kbId) {
|
|
336
|
+
log(_jsx(Box, { paddingX: 1, children: _jsx(StatusLine, { kind: "warning", label: `Cannot delete "${kbName}" — no knowledge_base_id stored. Push the KB first, then delete.` }) }));
|
|
403
337
|
continue;
|
|
404
|
-
let resourcesToSend = kbData.resources;
|
|
405
|
-
// If modified, diff against baseline
|
|
406
|
-
if (change.status === "modified") {
|
|
407
|
-
const baselineRaw = getBaselineRawContent(projectRoot, change.file);
|
|
408
|
-
if (baselineRaw) {
|
|
409
|
-
try {
|
|
410
|
-
const baselineJson = JSON.parse(baselineRaw);
|
|
411
|
-
const baselineResources = baselineJson.resources || [];
|
|
412
|
-
const resourceDiff = diffResources(baselineResources, kbData.resources);
|
|
413
|
-
// Warn about removed resources
|
|
414
|
-
for (const removed of resourceDiff.removed) {
|
|
415
|
-
log(_jsx(Box, { paddingX: 1, children: _jsx(StatusLine, { kind: "warning", label: `Resource removed from ${kbData.name}: "${removed.title}" — please delete via the UI` }) }));
|
|
416
|
-
}
|
|
417
|
-
resourcesToSend = [
|
|
418
|
-
...resourceDiff.added,
|
|
419
|
-
...resourceDiff.changed,
|
|
420
|
-
];
|
|
421
|
-
if (resourcesToSend.length === 0)
|
|
422
|
-
continue;
|
|
423
|
-
}
|
|
424
|
-
catch {
|
|
425
|
-
// If baseline parse fails, send all resources
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
338
|
}
|
|
429
|
-
await kbViewClient.
|
|
430
|
-
|
|
431
|
-
knowledge_bases: [
|
|
432
|
-
{ name: kbData.name, resources: resourcesToSend },
|
|
433
|
-
],
|
|
434
|
-
created_by: userId,
|
|
435
|
-
network_id: scope.network_id,
|
|
436
|
-
});
|
|
339
|
+
await kbViewClient.deleteKnowledgeBase(kbId, scope, kbName);
|
|
340
|
+
log(_jsx(Box, { paddingX: 1, children: _jsx(StatusLine, { kind: "success", label: `Deleted: ${kbName}` }) }));
|
|
437
341
|
}
|
|
438
|
-
|
|
342
|
+
deleteSpinner.succeed(`${deletedKBDirs.length} knowledge base(s) deleted`);
|
|
439
343
|
}
|
|
440
344
|
catch (error) {
|
|
441
|
-
|
|
345
|
+
kbDeleteSucceeded = false;
|
|
346
|
+
deleteSpinner.fail("Knowledge base deletion failed");
|
|
442
347
|
log(_jsx(ErrorDisplay, { error: error }));
|
|
443
348
|
}
|
|
444
349
|
}
|
|
445
|
-
//
|
|
446
|
-
|
|
447
|
-
|
|
350
|
+
// Upload full files for each changed KB
|
|
351
|
+
let kbUploadSucceeded = false;
|
|
352
|
+
if (existingKBDirs.length > 0) {
|
|
353
|
+
const kbSpinner = startSpinner(`Pushing ${existingKBDirs.length} knowledge base(s)...`);
|
|
448
354
|
try {
|
|
449
|
-
|
|
450
|
-
const binByKB = new Map();
|
|
451
|
-
for (const change of binaryChanges) {
|
|
452
|
-
const filePath = path.join(projectRoot, change.file);
|
|
453
|
-
if (!fs.existsSync(filePath))
|
|
454
|
-
continue;
|
|
455
|
-
const existing = binByKB.get(change.kbDirName) || [];
|
|
456
|
-
existing.push(filePath);
|
|
457
|
-
binByKB.set(change.kbDirName, existing);
|
|
458
|
-
}
|
|
459
|
-
for (const [kbDirName, files] of binByKB) {
|
|
355
|
+
for (const kbDirName of existingKBDirs) {
|
|
460
356
|
const kbDir = path.join(projectRoot, "knowledge-hubs", kbDirName);
|
|
461
357
|
const kbData = readKbFolder(kbDir);
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
}
|
|
358
|
+
if (!kbData)
|
|
359
|
+
continue;
|
|
360
|
+
const SUPPORTED_EXTENSIONS = new Set([".pdf", ".md", ".txt", ".json"]);
|
|
361
|
+
const supportedFiles = kbData.binaryFiles.filter((f) => SUPPORTED_EXTENSIONS.has(path.extname(f).toLowerCase()));
|
|
362
|
+
const skippedFiles = kbData.binaryFiles.filter((f) => !SUPPORTED_EXTENSIONS.has(path.extname(f).toLowerCase()));
|
|
363
|
+
for (const skipped of skippedFiles) {
|
|
364
|
+
log(_jsx(Box, { paddingX: 1, children: _jsx(StatusLine, { kind: "warning", label: `Skipped unsupported file: ${path.basename(skipped)} (only .pdf, .md, .txt, .json)` }) }));
|
|
365
|
+
}
|
|
366
|
+
if (supportedFiles.length > 0) {
|
|
367
|
+
const importResult = await kbViewClient.importFiles({
|
|
368
|
+
files: supportedFiles,
|
|
369
|
+
scope,
|
|
370
|
+
created_by: userId,
|
|
371
|
+
knowledge_base_name: kbData.name,
|
|
372
|
+
knowledge_base_description: kbData.description,
|
|
373
|
+
});
|
|
374
|
+
if (importResult.knowledge_base_id) {
|
|
375
|
+
const kbJsonPath = path.join(kbDir, "kb.json");
|
|
376
|
+
try {
|
|
377
|
+
const raw = JSON.parse(fs.readFileSync(kbJsonPath, "utf-8"));
|
|
378
|
+
raw.knowledge_base_id = importResult.knowledge_base_id;
|
|
379
|
+
fs.writeFileSync(kbJsonPath, JSON.stringify(raw, null, 2) + "\n");
|
|
380
|
+
}
|
|
381
|
+
catch { /* kb.json write failed, non-fatal */ }
|
|
382
|
+
}
|
|
383
|
+
}
|
|
470
384
|
}
|
|
471
|
-
|
|
385
|
+
kbSpinner.succeed(`Knowledge base(s) pushed`);
|
|
386
|
+
kbUploadSucceeded = true;
|
|
472
387
|
}
|
|
473
388
|
catch (error) {
|
|
474
|
-
|
|
389
|
+
kbSpinner.fail("Knowledge base push failed");
|
|
475
390
|
log(_jsx(ErrorDisplay, { error: error }));
|
|
476
391
|
}
|
|
477
392
|
}
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
393
|
+
else {
|
|
394
|
+
kbUploadSucceeded = true;
|
|
395
|
+
}
|
|
396
|
+
const kbPushSucceeded = kbUploadSucceeded && kbDeleteSucceeded;
|
|
397
|
+
// Commit KB changes to baseline only if push succeeded
|
|
398
|
+
if (kbPushSucceeded) {
|
|
399
|
+
const kbFilesToAdd = kbChanges
|
|
400
|
+
.filter((c) => c.status !== "deleted")
|
|
401
|
+
.map((c) => c.file);
|
|
402
|
+
const kbFilesToDelete = kbChanges
|
|
403
|
+
.filter((c) => c.status === "deleted")
|
|
404
|
+
.map((c) => c.file);
|
|
405
|
+
if (kbFilesToAdd.length > 0 || kbFilesToDelete.length > 0) {
|
|
406
|
+
const { commitBaselineFiles: commitKBFiles, removeBaselineFiles } = await import("../utils/git.js");
|
|
407
|
+
if (kbFilesToDelete.length > 0) {
|
|
408
|
+
removeBaselineFiles(projectRoot, kbFilesToDelete);
|
|
409
|
+
}
|
|
410
|
+
if (kbFilesToAdd.length > 0) {
|
|
411
|
+
commitKBFiles(projectRoot, kbFilesToAdd, "pushed knowledge hub changes");
|
|
412
|
+
}
|
|
413
|
+
else {
|
|
414
|
+
commitKBFiles(projectRoot, [], "removed knowledge hub files");
|
|
415
|
+
}
|
|
416
|
+
}
|
|
485
417
|
}
|
|
486
418
|
}
|
|
487
419
|
}
|
|
@@ -663,15 +595,11 @@ async function _push(pushSpan, agentCode, options = {}) {
|
|
|
663
595
|
t.type === "delete-tool");
|
|
664
596
|
const settingsTasks = pushTasks.filter((t) => t.type === "patch-general-settings");
|
|
665
597
|
const rulesTasks = pushTasks.filter((t) => t.type === "put-rules");
|
|
666
|
-
const widgetTasks = pushTasks.filter((t) => t.type === "create-widget" ||
|
|
667
|
-
t.type === "patch-widget" ||
|
|
668
|
-
t.type === "delete-widget");
|
|
669
598
|
await pushStep(paramTasks, "Pushing parameters", false);
|
|
670
599
|
await pushStep(entityTasks, "Pushing entities", false);
|
|
671
600
|
if (!integrationsAlreadyPushed) {
|
|
672
601
|
await pushStep(integrationTasks, "Pushing integrations", false);
|
|
673
602
|
}
|
|
674
|
-
await pushStep(widgetTasks, "Pushing widgets", false);
|
|
675
603
|
await pushStep(toolTasks, "Pushing tools", true);
|
|
676
604
|
await pushStep(settingsTasks, "Pushing general settings", false);
|
|
677
605
|
await pushStep(rulesTasks, "Pushing rules", false);
|
|
@@ -965,8 +893,6 @@ function getArrayFileInfoForPush(filePath, dir) {
|
|
|
965
893
|
};
|
|
966
894
|
if (content.rules)
|
|
967
895
|
return { arrayKey: "rules", itemKey: "code", label: "Rules" };
|
|
968
|
-
if (content.widgets)
|
|
969
|
-
return { arrayKey: "widgets", itemKey: "name", label: "Widgets" };
|
|
970
896
|
return null;
|
|
971
897
|
}
|
|
972
898
|
catch {
|
|
@@ -1288,38 +1214,6 @@ function buildPushTasks(diff, fileData, projectRoot, getFileDiffFn) {
|
|
|
1288
1214
|
body: rulesData,
|
|
1289
1215
|
});
|
|
1290
1216
|
}
|
|
1291
|
-
else if (fd.type === "widgets") {
|
|
1292
|
-
const itemDiffs = getItemLevelDiff(projectRoot, change.file, "widgets", "name");
|
|
1293
|
-
for (const item of itemDiffs) {
|
|
1294
|
-
if (item.status === "added") {
|
|
1295
|
-
tasks.push({
|
|
1296
|
-
type: "create-widget",
|
|
1297
|
-
label: `Create widget: ${item.key}`,
|
|
1298
|
-
file: change.file,
|
|
1299
|
-
body: item.newItem,
|
|
1300
|
-
itemCode: item.key,
|
|
1301
|
-
});
|
|
1302
|
-
}
|
|
1303
|
-
else if (item.status === "modified") {
|
|
1304
|
-
tasks.push({
|
|
1305
|
-
type: "patch-widget",
|
|
1306
|
-
label: `Update widget: ${item.key}`,
|
|
1307
|
-
file: change.file,
|
|
1308
|
-
body: item.newItem,
|
|
1309
|
-
itemCode: item.key,
|
|
1310
|
-
});
|
|
1311
|
-
}
|
|
1312
|
-
else if (item.status === "deleted") {
|
|
1313
|
-
tasks.push({
|
|
1314
|
-
type: "delete-widget",
|
|
1315
|
-
label: `Delete widget: ${item.key}`,
|
|
1316
|
-
file: change.file,
|
|
1317
|
-
body: item.oldItem,
|
|
1318
|
-
itemCode: item.key,
|
|
1319
|
-
});
|
|
1320
|
-
}
|
|
1321
|
-
}
|
|
1322
|
-
}
|
|
1323
1217
|
}
|
|
1324
1218
|
return tasks;
|
|
1325
1219
|
}
|
|
@@ -1459,85 +1353,8 @@ async function _executePushTask(client, params, task) {
|
|
|
1459
1353
|
return client.deleteIntegration(params, task.itemCode);
|
|
1460
1354
|
case "put-rules":
|
|
1461
1355
|
return client.putRules(params, task.body);
|
|
1462
|
-
case "create-widget":
|
|
1463
|
-
try {
|
|
1464
|
-
return await client.createWidget(params, task.body);
|
|
1465
|
-
}
|
|
1466
|
-
catch (err) {
|
|
1467
|
-
if ((err.statusCode ?? err.status) === 409) {
|
|
1468
|
-
return client.patchWidget(params, task.itemCode, task.body);
|
|
1469
|
-
}
|
|
1470
|
-
throw err;
|
|
1471
|
-
}
|
|
1472
|
-
case "patch-widget":
|
|
1473
|
-
return client.patchWidget(params, task.itemCode, task.body);
|
|
1474
|
-
case "delete-widget":
|
|
1475
|
-
return client.deleteWidget(params, task.itemCode);
|
|
1476
1356
|
default:
|
|
1477
1357
|
throw new Error(`Unknown push task type: ${task.type}`);
|
|
1478
1358
|
}
|
|
1479
1359
|
}
|
|
1480
|
-
function detectRagFileChanges(fileData, projectRoot) {
|
|
1481
|
-
const stats = {
|
|
1482
|
-
total: 0,
|
|
1483
|
-
newFiles: 0,
|
|
1484
|
-
changedFiles: 0,
|
|
1485
|
-
unchangedFiles: 0,
|
|
1486
|
-
urlSources: 0,
|
|
1487
|
-
pendingFiles: [],
|
|
1488
|
-
pendingUrls: [],
|
|
1489
|
-
};
|
|
1490
|
-
for (const fd of fileData) {
|
|
1491
|
-
if (fd.type !== "integrations")
|
|
1492
|
-
continue;
|
|
1493
|
-
const integrations = fd.data?.integrations;
|
|
1494
|
-
if (!Array.isArray(integrations))
|
|
1495
|
-
continue;
|
|
1496
|
-
for (const integration of integrations) {
|
|
1497
|
-
if (integration.type !== "RAG")
|
|
1498
|
-
continue;
|
|
1499
|
-
const kh = integration.settings?.knowledge_hub;
|
|
1500
|
-
const kbId = integration.settings?.knowledge_base_id;
|
|
1501
|
-
const kbName = kh?.name;
|
|
1502
|
-
if (!kh?.files)
|
|
1503
|
-
continue;
|
|
1504
|
-
for (const file of kh.files) {
|
|
1505
|
-
stats.total++;
|
|
1506
|
-
if (file.source === "url") {
|
|
1507
|
-
stats.urlSources++;
|
|
1508
|
-
if (file.status === "pending") {
|
|
1509
|
-
stats.pendingUrls.push({ url: file.url, kbId, kbName });
|
|
1510
|
-
}
|
|
1511
|
-
continue;
|
|
1512
|
-
}
|
|
1513
|
-
if (!file.path) {
|
|
1514
|
-
stats.newFiles++;
|
|
1515
|
-
continue;
|
|
1516
|
-
}
|
|
1517
|
-
const resolved = path.resolve(projectRoot, file.path);
|
|
1518
|
-
if (!fs.existsSync(resolved)) {
|
|
1519
|
-
stats.newFiles++;
|
|
1520
|
-
continue;
|
|
1521
|
-
}
|
|
1522
|
-
const content = fs.readFileSync(resolved);
|
|
1523
|
-
const currentHash = crypto
|
|
1524
|
-
.createHash("sha256")
|
|
1525
|
-
.update(content)
|
|
1526
|
-
.digest("hex");
|
|
1527
|
-
if (!file.content_hash) {
|
|
1528
|
-
stats.newFiles++;
|
|
1529
|
-
stats.pendingFiles.push({ path: resolved, kbId, kbName });
|
|
1530
|
-
}
|
|
1531
|
-
else if (file.content_hash !== currentHash) {
|
|
1532
|
-
stats.changedFiles++;
|
|
1533
|
-
stats.pendingFiles.push({ path: resolved, kbId, kbName });
|
|
1534
|
-
}
|
|
1535
|
-
else {
|
|
1536
|
-
stats.unchangedFiles++;
|
|
1537
|
-
}
|
|
1538
|
-
}
|
|
1539
|
-
}
|
|
1540
|
-
}
|
|
1541
|
-
return stats;
|
|
1542
|
-
}
|
|
1543
1360
|
//# sourceMappingURL=push.js.map
|