@agentforge/tools 0.9.0 → 0.10.0

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/index.js CHANGED
@@ -1032,6 +1032,506 @@ function createSlackTools(config = {}) {
1032
1032
  };
1033
1033
  }
1034
1034
  var slackTools = [sendSlackMessage, notifySlack, getSlackChannels, getSlackMessages];
1035
+
1036
+ // src/web/confluence/auth.ts
1037
+ function createGetConfiguredAuth(apiKey, email, siteUrl) {
1038
+ return function getConfiguredAuth() {
1039
+ const ATLASSIAN_API_KEY = apiKey || process.env.ATLASSIAN_API_KEY || "";
1040
+ const ATLASSIAN_EMAIL = email || process.env.ATLASSIAN_EMAIL || "";
1041
+ const ATLASSIAN_SITE_URL = (siteUrl || process.env.ATLASSIAN_SITE_URL || "").replace(/\/$/, "");
1042
+ if (!ATLASSIAN_API_KEY || !ATLASSIAN_EMAIL || !ATLASSIAN_SITE_URL) {
1043
+ throw new Error(
1044
+ "Confluence credentials not configured. Set ATLASSIAN_API_KEY, ATLASSIAN_EMAIL, and ATLASSIAN_SITE_URL in config or environment variables."
1045
+ );
1046
+ }
1047
+ return { ATLASSIAN_API_KEY, ATLASSIAN_EMAIL, ATLASSIAN_SITE_URL };
1048
+ };
1049
+ }
1050
+ function createGetConfiguredAuthHeader(getConfiguredAuth) {
1051
+ return function getConfiguredAuthHeader() {
1052
+ const { ATLASSIAN_API_KEY, ATLASSIAN_EMAIL } = getConfiguredAuth();
1053
+ const auth = Buffer.from(`${ATLASSIAN_EMAIL}:${ATLASSIAN_API_KEY}`).toString("base64");
1054
+ return `Basic ${auth}`;
1055
+ };
1056
+ }
1057
+ function getConfig() {
1058
+ const ATLASSIAN_API_KEY = process.env.ATLASSIAN_API_KEY || "";
1059
+ const ATLASSIAN_EMAIL = process.env.ATLASSIAN_EMAIL || "";
1060
+ const ATLASSIAN_SITE_URL = (process.env.ATLASSIAN_SITE_URL || "").replace(/\/$/, "");
1061
+ if (!ATLASSIAN_API_KEY || !ATLASSIAN_EMAIL || !ATLASSIAN_SITE_URL) {
1062
+ throw new Error("Confluence credentials not configured. Set ATLASSIAN_API_KEY, ATLASSIAN_EMAIL, and ATLASSIAN_SITE_URL in .env");
1063
+ }
1064
+ return { ATLASSIAN_API_KEY, ATLASSIAN_EMAIL, ATLASSIAN_SITE_URL };
1065
+ }
1066
+ function getAuthHeader() {
1067
+ const { ATLASSIAN_API_KEY, ATLASSIAN_EMAIL } = getConfig();
1068
+ const auth = Buffer.from(`${ATLASSIAN_EMAIL}:${ATLASSIAN_API_KEY}`).toString("base64");
1069
+ return `Basic ${auth}`;
1070
+ }
1071
+ function createSearchConfluenceTool(getAuth, getAuthHeader2, logger4) {
1072
+ return toolBuilder().name("search-confluence").description("Search for pages in Confluence using keywords or CQL (Confluence Query Language). Returns matching pages with titles, IDs, and excerpts.").category(ToolCategory.WEB).tag("confluence").tag("search").tag("knowledge-base").usageNotes("Use this to find relevant documentation, policies, or information in Confluence. You can search by keywords or use CQL for advanced queries (e.g., 'space=AI AND type=page'). Use get-confluence-page to retrieve full content of specific pages.").suggests(["get-confluence-page"]).schema(z.object({
1073
+ query: z.string().describe("Search query or CQL expression (e.g., 'payment processing' or 'space=BL3 AND title~payment')"),
1074
+ limit: z.number().optional().describe("Maximum number of results to return (default: 10, max: 25)")
1075
+ })).implement(async ({ query, limit = 10 }) => {
1076
+ logger4.info("search-confluence called", { query, limit });
1077
+ try {
1078
+ const { ATLASSIAN_SITE_URL } = getAuth();
1079
+ const response = await axios.get(`${ATLASSIAN_SITE_URL}/wiki/rest/api/content/search`, {
1080
+ headers: {
1081
+ Authorization: getAuthHeader2(),
1082
+ Accept: "application/json"
1083
+ },
1084
+ params: {
1085
+ cql: query,
1086
+ limit: Math.min(limit, 25),
1087
+ expand: "space,version"
1088
+ }
1089
+ });
1090
+ const { ATLASSIAN_SITE_URL: siteUrl } = getAuth();
1091
+ const results = response.data.results.map((page) => ({
1092
+ id: page.id,
1093
+ title: page.title,
1094
+ type: page.type,
1095
+ space: page.space?.name || "Unknown",
1096
+ spaceKey: page.space?.key || "",
1097
+ url: `${siteUrl}/wiki${page._links.webui}`,
1098
+ lastModified: page.version?.when || ""
1099
+ }));
1100
+ if (results.length === 0) {
1101
+ logger4.warn("search-confluence returned NO RESULTS - this is a valid outcome, agent should not retry", {
1102
+ query,
1103
+ limit,
1104
+ totalSize: response.data.totalSize
1105
+ });
1106
+ } else {
1107
+ logger4.info("search-confluence result", {
1108
+ query,
1109
+ resultCount: results.length,
1110
+ totalSize: response.data.totalSize,
1111
+ titles: results.map((r) => r.title).slice(0, 3)
1112
+ // Log first 3 titles
1113
+ });
1114
+ }
1115
+ return JSON.stringify({
1116
+ success: true,
1117
+ count: results.length,
1118
+ total: response.data.totalSize,
1119
+ results
1120
+ });
1121
+ } catch (error) {
1122
+ logger4.error("search-confluence error", {
1123
+ query,
1124
+ error: error.response?.data?.message || error.message,
1125
+ status: error.response?.status
1126
+ });
1127
+ return JSON.stringify({
1128
+ success: false,
1129
+ error: error.response?.data?.message || error.message
1130
+ });
1131
+ }
1132
+ }).build();
1133
+ }
1134
+ function createGetConfluencePageTool(getAuth, getAuthHeader2, logger4) {
1135
+ return toolBuilder().name("get-confluence-page").description("Get the full content of a specific Confluence page by its ID. Returns the page title, content (in storage format), space, and metadata.").category(ToolCategory.WEB).tag("confluence").tag("page").tag("content").usageNotes("Use this after search-confluence to retrieve the full content of a specific page. The page ID can be found in search results.").requires(["search-confluence"]).schema(z.object({
1136
+ page_id: z.string().describe("The Confluence page ID (from search results)")
1137
+ })).implement(async ({ page_id }) => {
1138
+ logger4.info("get-confluence-page called", { page_id });
1139
+ try {
1140
+ const { ATLASSIAN_SITE_URL } = getAuth();
1141
+ const response = await axios.get(`${ATLASSIAN_SITE_URL}/wiki/rest/api/content/${page_id}`, {
1142
+ headers: {
1143
+ Authorization: getAuthHeader2(),
1144
+ Accept: "application/json"
1145
+ },
1146
+ params: {
1147
+ expand: "body.storage,space,version,history"
1148
+ }
1149
+ });
1150
+ const page = response.data;
1151
+ logger4.info("get-confluence-page result", {
1152
+ page_id,
1153
+ title: page.title,
1154
+ space: page.space?.name,
1155
+ contentLength: page.body?.storage?.value?.length || 0
1156
+ });
1157
+ return JSON.stringify({
1158
+ success: true,
1159
+ page: {
1160
+ id: page.id,
1161
+ title: page.title,
1162
+ type: page.type,
1163
+ space: page.space?.name || "Unknown",
1164
+ spaceKey: page.space?.key || "",
1165
+ content: page.body?.storage?.value || "",
1166
+ url: `${ATLASSIAN_SITE_URL}/wiki${page._links.webui}`,
1167
+ created: page.history?.createdDate || "",
1168
+ lastModified: page.version?.when || "",
1169
+ version: page.version?.number || 1
1170
+ }
1171
+ });
1172
+ } catch (error) {
1173
+ logger4.error("get-confluence-page error", {
1174
+ page_id,
1175
+ error: error.response?.data?.message || error.message,
1176
+ status: error.response?.status
1177
+ });
1178
+ return JSON.stringify({
1179
+ success: false,
1180
+ error: error.response?.data?.message || error.message
1181
+ });
1182
+ }
1183
+ }).build();
1184
+ }
1185
+ function createListConfluenceSpacesTool(getAuth, getAuthHeader2, logger4) {
1186
+ return toolBuilder().name("list-confluence-spaces").description("List all available Confluence spaces. Returns space names, keys, types, and descriptions to help identify where to search for information.").category(ToolCategory.WEB).tag("confluence").tag("spaces").tag("list").usageNotes("Use this first to discover available spaces before searching. Helps narrow down searches to specific areas (e.g., 'AI', 'BL3', 'Finance').").follows(["search-confluence"]).schema(z.object({
1187
+ limit: z.number().optional().describe("Maximum number of spaces to return (default: 25)")
1188
+ })).implement(async ({ limit = 25 }) => {
1189
+ logger4.info("list-confluence-spaces called", { limit });
1190
+ try {
1191
+ const { ATLASSIAN_SITE_URL } = getAuth();
1192
+ const response = await axios.get(`${ATLASSIAN_SITE_URL}/wiki/rest/api/space`, {
1193
+ headers: {
1194
+ Authorization: getAuthHeader2(),
1195
+ Accept: "application/json"
1196
+ },
1197
+ params: {
1198
+ limit
1199
+ }
1200
+ });
1201
+ const spaces = response.data.results.map((space) => ({
1202
+ key: space.key,
1203
+ name: space.name,
1204
+ type: space.type,
1205
+ description: space.description?.plain?.value || "",
1206
+ url: `${ATLASSIAN_SITE_URL}/wiki${space._links.webui}`
1207
+ }));
1208
+ logger4.info("list-confluence-spaces result", {
1209
+ spaceCount: spaces.length,
1210
+ spaceKeys: spaces.map((s) => s.key).slice(0, 5)
1211
+ // Log first 5 space keys
1212
+ });
1213
+ return JSON.stringify({
1214
+ success: true,
1215
+ count: spaces.length,
1216
+ spaces
1217
+ });
1218
+ } catch (error) {
1219
+ logger4.error("list-confluence-spaces error", {
1220
+ error: error.response?.data?.message || error.message,
1221
+ status: error.response?.status
1222
+ });
1223
+ return JSON.stringify({
1224
+ success: false,
1225
+ error: error.response?.data?.message || error.message
1226
+ });
1227
+ }
1228
+ }).build();
1229
+ }
1230
+ function createGetSpacePagesTool(getAuth, getAuthHeader2, logger4) {
1231
+ return toolBuilder().name("get-space-pages").description("Get all pages from a specific Confluence space by space key. Useful for browsing content in a particular area.").category(ToolCategory.WEB).tag("confluence").tag("space").tag("pages").usageNotes("Use this to explore all pages in a specific space. Get the space key from list-confluence-spaces first.").requires(["list-confluence-spaces"]).schema(z.object({
1232
+ space_key: z.string().describe("The space key (e.g., 'AI', 'BL3', 'FIN')"),
1233
+ limit: z.number().optional().describe("Maximum number of pages to return (default: 25)")
1234
+ })).implement(async ({ space_key, limit = 25 }) => {
1235
+ logger4.info("get-space-pages called", { space_key, limit });
1236
+ try {
1237
+ const { ATLASSIAN_SITE_URL } = getAuth();
1238
+ const response = await axios.get(`${ATLASSIAN_SITE_URL}/wiki/rest/api/content`, {
1239
+ headers: {
1240
+ Authorization: getAuthHeader2(),
1241
+ Accept: "application/json"
1242
+ },
1243
+ params: {
1244
+ spaceKey: space_key,
1245
+ type: "page",
1246
+ limit,
1247
+ expand: "version"
1248
+ }
1249
+ });
1250
+ const pages = response.data.results.map((page) => ({
1251
+ id: page.id,
1252
+ title: page.title,
1253
+ url: `${ATLASSIAN_SITE_URL}/wiki${page._links.webui}`,
1254
+ lastModified: page.version?.when || ""
1255
+ }));
1256
+ if (pages.length === 0) {
1257
+ logger4.warn("get-space-pages returned NO PAGES - this is a valid outcome, agent should not retry", {
1258
+ space_key,
1259
+ limit
1260
+ });
1261
+ } else {
1262
+ logger4.info("get-space-pages result", {
1263
+ space_key,
1264
+ pageCount: pages.length,
1265
+ titles: pages.map((p) => p.title).slice(0, 3)
1266
+ // Log first 3 titles
1267
+ });
1268
+ }
1269
+ return JSON.stringify({
1270
+ success: true,
1271
+ space: space_key,
1272
+ count: pages.length,
1273
+ pages
1274
+ });
1275
+ } catch (error) {
1276
+ logger4.error("get-space-pages error", {
1277
+ space_key,
1278
+ error: error.response?.data?.message || error.message,
1279
+ status: error.response?.status
1280
+ });
1281
+ return JSON.stringify({
1282
+ success: false,
1283
+ error: error.response?.data?.message || error.message
1284
+ });
1285
+ }
1286
+ }).build();
1287
+ }
1288
+ function createCreateConfluencePageTool(getAuth, getAuthHeader2, logger4) {
1289
+ return toolBuilder().name("create-confluence-page").description("Create a new page in a Confluence space. Requires space key, page title, and content (in HTML storage format).").category(ToolCategory.WEB).tag("confluence").tag("create").tag("write").usageNotes("Use this to create new documentation pages. Content should be in Confluence storage format (HTML). Get the space key from list-confluence-spaces first. Be mindful of creating duplicate pages.").requires(["list-confluence-spaces"]).schema(z.object({
1290
+ space_key: z.string().describe("The space key where the page will be created (e.g., 'AI', 'BL3')"),
1291
+ title: z.string().describe("The title of the new page"),
1292
+ content: z.string().describe("The page content in HTML format (Confluence storage format)"),
1293
+ parent_page_id: z.string().optional().describe("Optional parent page ID to create this as a child page")
1294
+ })).implement(async ({ space_key, title, content, parent_page_id }) => {
1295
+ logger4.info("create-confluence-page called", { space_key, title, hasParent: !!parent_page_id });
1296
+ try {
1297
+ const { ATLASSIAN_SITE_URL } = getAuth();
1298
+ const pageData = {
1299
+ type: "page",
1300
+ title,
1301
+ space: { key: space_key },
1302
+ body: {
1303
+ storage: {
1304
+ value: content,
1305
+ representation: "storage"
1306
+ }
1307
+ }
1308
+ };
1309
+ if (parent_page_id) {
1310
+ pageData.ancestors = [{ id: parent_page_id }];
1311
+ }
1312
+ const response = await axios.post(
1313
+ `${ATLASSIAN_SITE_URL}/wiki/rest/api/content`,
1314
+ pageData,
1315
+ {
1316
+ headers: {
1317
+ Authorization: getAuthHeader2(),
1318
+ "Content-Type": "application/json"
1319
+ }
1320
+ }
1321
+ );
1322
+ logger4.info("create-confluence-page result", {
1323
+ page_id: response.data.id,
1324
+ title: response.data.title,
1325
+ space: space_key
1326
+ });
1327
+ return JSON.stringify({
1328
+ success: true,
1329
+ page: {
1330
+ id: response.data.id,
1331
+ title: response.data.title,
1332
+ space: space_key,
1333
+ url: `${ATLASSIAN_SITE_URL}/wiki${response.data._links.webui}`,
1334
+ version: response.data.version?.number || 1
1335
+ }
1336
+ });
1337
+ } catch (error) {
1338
+ logger4.error("create-confluence-page error", {
1339
+ space_key,
1340
+ title,
1341
+ error: error.response?.data?.message || error.message,
1342
+ status: error.response?.status
1343
+ });
1344
+ return JSON.stringify({
1345
+ success: false,
1346
+ error: error.response?.data?.message || error.message
1347
+ });
1348
+ }
1349
+ }).build();
1350
+ }
1351
+ function createUpdateConfluencePageTool(getAuth, getAuthHeader2, logger4) {
1352
+ return toolBuilder().name("update-confluence-page").description("Update an existing Confluence page's content. Requires page ID, new title, and new content.").category(ToolCategory.WEB).tag("confluence").tag("update").tag("write").usageNotes("Use this to update existing documentation. You must provide the page ID (from search results). The tool will automatically handle version incrementing. Always get the current page content first to avoid overwriting important information.").requires(["get-confluence-page"]).schema(z.object({
1353
+ page_id: z.string().describe("The ID of the page to update"),
1354
+ title: z.string().describe("The new title for the page"),
1355
+ content: z.string().describe("The new content in HTML format (Confluence storage format)")
1356
+ })).implement(async ({ page_id, title, content }) => {
1357
+ logger4.info("update-confluence-page called", { page_id, title });
1358
+ try {
1359
+ const { ATLASSIAN_SITE_URL } = getAuth();
1360
+ const getResponse = await axios.get(
1361
+ `${ATLASSIAN_SITE_URL}/wiki/rest/api/content/${page_id}`,
1362
+ {
1363
+ headers: {
1364
+ Authorization: getAuthHeader2()
1365
+ },
1366
+ params: { expand: "version" }
1367
+ }
1368
+ );
1369
+ const currentVersion = getResponse.data.version.number;
1370
+ const updateResponse = await axios.put(
1371
+ `${ATLASSIAN_SITE_URL}/wiki/rest/api/content/${page_id}`,
1372
+ {
1373
+ type: "page",
1374
+ title,
1375
+ version: { number: currentVersion + 1 },
1376
+ body: {
1377
+ storage: {
1378
+ value: content,
1379
+ representation: "storage"
1380
+ }
1381
+ }
1382
+ },
1383
+ {
1384
+ headers: {
1385
+ Authorization: getAuthHeader2(),
1386
+ "Content-Type": "application/json"
1387
+ }
1388
+ }
1389
+ );
1390
+ logger4.info("update-confluence-page result", {
1391
+ page_id,
1392
+ title: updateResponse.data.title,
1393
+ previousVersion: currentVersion,
1394
+ newVersion: updateResponse.data.version.number
1395
+ });
1396
+ return JSON.stringify({
1397
+ success: true,
1398
+ page: {
1399
+ id: updateResponse.data.id,
1400
+ title: updateResponse.data.title,
1401
+ url: `${ATLASSIAN_SITE_URL}/wiki${updateResponse.data._links.webui}`,
1402
+ version: updateResponse.data.version.number,
1403
+ previousVersion: currentVersion
1404
+ }
1405
+ });
1406
+ } catch (error) {
1407
+ logger4.error("update-confluence-page error", {
1408
+ page_id,
1409
+ title,
1410
+ error: error.response?.data?.message || error.message,
1411
+ status: error.response?.status
1412
+ });
1413
+ return JSON.stringify({
1414
+ success: false,
1415
+ error: error.response?.data?.message || error.message
1416
+ });
1417
+ }
1418
+ }).build();
1419
+ }
1420
+ function createArchiveConfluencePageTool(getAuth, getAuthHeader2, logger4) {
1421
+ return toolBuilder().name("archive-confluence-page").description("Archive a Confluence page by moving it to trash. The page can be restored by space admins. Note: UI may require a note explaining why the page was archived.").category(ToolCategory.WEB).tag("confluence").tag("archive").tag("delete").usageNotes("Use this to archive outdated or obsolete documentation. The page is moved to trash, not permanently deleted. Space admins can restore it if needed. Be very careful - only archive pages that are truly obsolete.").conflicts(["create-confluence-page"]).schema(z.object({
1422
+ page_id: z.string().describe("The ID of the page to archive"),
1423
+ reason: z.string().optional().describe("Optional reason for archiving (for audit trail)")
1424
+ })).implement(async ({ page_id, reason }) => {
1425
+ logger4.info("archive-confluence-page called", { page_id, reason });
1426
+ try {
1427
+ const { ATLASSIAN_SITE_URL } = getAuth();
1428
+ const getResponse = await axios.get(
1429
+ `${ATLASSIAN_SITE_URL}/wiki/rest/api/content/${page_id}`,
1430
+ {
1431
+ headers: {
1432
+ Authorization: getAuthHeader2()
1433
+ },
1434
+ params: { expand: "version,body.storage,space" }
1435
+ }
1436
+ );
1437
+ const currentVersion = getResponse.data.version.number;
1438
+ const pageData = getResponse.data;
1439
+ await axios.put(
1440
+ `${ATLASSIAN_SITE_URL}/wiki/rest/api/content/${page_id}`,
1441
+ {
1442
+ version: { number: currentVersion + 1 },
1443
+ title: pageData.title,
1444
+ type: "page",
1445
+ status: "trashed",
1446
+ body: pageData.body,
1447
+ space: { key: pageData.space.key }
1448
+ },
1449
+ {
1450
+ headers: {
1451
+ Authorization: getAuthHeader2(),
1452
+ "Content-Type": "application/json"
1453
+ }
1454
+ }
1455
+ );
1456
+ logger4.info("archive-confluence-page result", {
1457
+ page_id,
1458
+ title: pageData.title,
1459
+ previousVersion: currentVersion,
1460
+ newVersion: currentVersion + 1
1461
+ });
1462
+ return JSON.stringify({
1463
+ success: true,
1464
+ archived: {
1465
+ id: page_id,
1466
+ title: pageData.title,
1467
+ previousVersion: currentVersion,
1468
+ newVersion: currentVersion + 1,
1469
+ reason: reason || "Archived via API",
1470
+ note: "Page moved to trash. Space admins can restore it from the Confluence UI."
1471
+ }
1472
+ });
1473
+ } catch (error) {
1474
+ logger4.error("archive-confluence-page error", {
1475
+ page_id,
1476
+ error: error.response?.data?.message || error.message,
1477
+ status: error.response?.status
1478
+ });
1479
+ return JSON.stringify({
1480
+ success: false,
1481
+ error: error.response?.data?.message || error.message
1482
+ });
1483
+ }
1484
+ }).build();
1485
+ }
1486
+
1487
+ // src/web/confluence/index.ts
1488
+ var logLevel2 = process.env.LOG_LEVEL?.toLowerCase() || LogLevel.INFO;
1489
+ var logger2 = createLogger("[tools:confluence]", { level: logLevel2 });
1490
+ var searchConfluence = createSearchConfluenceTool(getConfig, getAuthHeader, logger2);
1491
+ var getConfluencePage = createGetConfluencePageTool(getConfig, getAuthHeader, logger2);
1492
+ var listConfluenceSpaces = createListConfluenceSpacesTool(getConfig, getAuthHeader, logger2);
1493
+ var getSpacePages = createGetSpacePagesTool(getConfig, getAuthHeader, logger2);
1494
+ var createConfluencePage = createCreateConfluencePageTool(getConfig, getAuthHeader, logger2);
1495
+ var updateConfluencePage = createUpdateConfluencePageTool(getConfig, getAuthHeader, logger2);
1496
+ var archiveConfluencePage = createArchiveConfluencePageTool(getConfig, getAuthHeader, logger2);
1497
+ var confluenceTools = [
1498
+ // Read tools
1499
+ searchConfluence,
1500
+ getConfluencePage,
1501
+ listConfluenceSpaces,
1502
+ getSpacePages,
1503
+ // Write tools
1504
+ createConfluencePage,
1505
+ updateConfluencePage,
1506
+ archiveConfluencePage
1507
+ ];
1508
+ function createConfluenceTools(config = {}) {
1509
+ const {
1510
+ apiKey,
1511
+ email,
1512
+ siteUrl,
1513
+ logLevel: customLogLevel
1514
+ } = config;
1515
+ const getConfiguredAuth = createGetConfiguredAuth(apiKey, email, siteUrl);
1516
+ const getConfiguredAuthHeader = createGetConfiguredAuthHeader(getConfiguredAuth);
1517
+ const toolLogger = customLogLevel ? createLogger("tools:confluence", { level: customLogLevel }) : logger2;
1518
+ const searchConfluence2 = createSearchConfluenceTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);
1519
+ const getConfluencePage2 = createGetConfluencePageTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);
1520
+ const listConfluenceSpaces2 = createListConfluenceSpacesTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);
1521
+ const getSpacePages2 = createGetSpacePagesTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);
1522
+ const createConfluencePage2 = createCreateConfluencePageTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);
1523
+ const updateConfluencePage2 = createUpdateConfluencePageTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);
1524
+ const archiveConfluencePage2 = createArchiveConfluencePageTool(getConfiguredAuth, getConfiguredAuthHeader, toolLogger);
1525
+ return {
1526
+ searchConfluence: searchConfluence2,
1527
+ getConfluencePage: getConfluencePage2,
1528
+ listConfluenceSpaces: listConfluenceSpaces2,
1529
+ getSpacePages: getSpacePages2,
1530
+ createConfluencePage: createConfluencePage2,
1531
+ updateConfluencePage: updateConfluencePage2,
1532
+ archiveConfluencePage: archiveConfluencePage2
1533
+ };
1534
+ }
1035
1535
  var jsonParser = toolBuilder().name("json-parser").description("Parse JSON string into an object. Validates JSON syntax and returns parsed data or error details.").category(ToolCategory.UTILITY).tags(["json", "parse", "data"]).schema(z.object({
1036
1536
  json: z.string().describe("JSON string to parse"),
1037
1537
  strict: z.boolean().default(true).describe("Use strict JSON parsing (no trailing commas, etc.)")
@@ -2256,8 +2756,8 @@ var AskHumanInputSchema = z.object({
2256
2756
  */
2257
2757
  suggestions: z.array(z.string()).optional().describe("Suggested responses for the human")
2258
2758
  });
2259
- var logLevel2 = process.env.LOG_LEVEL?.toLowerCase() || LogLevel.INFO;
2260
- var logger2 = createLogger("askHuman", { level: logLevel2 });
2759
+ var logLevel3 = process.env.LOG_LEVEL?.toLowerCase() || LogLevel.INFO;
2760
+ var logger3 = createLogger("askHuman", { level: logLevel3 });
2261
2761
  function createAskHumanTool() {
2262
2762
  return toolBuilder().name("ask-human").description(
2263
2763
  "Ask a human for input or approval. Use this when you need human guidance, approval for a critical action, or clarification on ambiguous requirements. The agent execution will pause until the human responds."
@@ -2290,13 +2790,13 @@ function createAskHumanTool() {
2290
2790
  suggestions: validatedInput.suggestions,
2291
2791
  status: "pending"
2292
2792
  };
2293
- logger2.debug("About to call interrupt()", { humanRequest });
2793
+ logger3.debug("About to call interrupt()", { humanRequest });
2294
2794
  let response;
2295
2795
  try {
2296
2796
  response = interrupt(humanRequest);
2297
- logger2.debug("interrupt() returned successfully", { response, responseType: typeof response });
2797
+ logger3.debug("interrupt() returned successfully", { response, responseType: typeof response });
2298
2798
  } catch (error) {
2299
- logger2.debug("interrupt() threw error (expected for GraphInterrupt)", {
2799
+ logger3.debug("interrupt() threw error (expected for GraphInterrupt)", {
2300
2800
  errorType: error?.constructor?.name,
2301
2801
  error: error instanceof Error ? error.message : String(error)
2302
2802
  });
@@ -2321,6 +2821,6 @@ function createAskHumanTool() {
2321
2821
  }
2322
2822
  var askHumanTool = createAskHumanTool();
2323
2823
 
2324
- export { AskHumanInputSchema, DuckDuckGoProvider, SerperProvider, arrayFilter, arrayGroupBy, arrayMap, arraySort, askHumanTool, calculator, createAskHumanTool, createDuckDuckGoProvider, createSerperProvider, createSlackTools, creditCardValidator, csvGenerator, csvParser, csvToJson, currentDateTime, dateArithmetic, dateComparison, dateDifference, dateFormatter, directoryCreate, directoryDelete, directoryList, emailValidator, extractImages, extractLinks, fileAppend, fileDelete, fileExists, fileReader, fileSearch, fileWriter, getSlackChannels, getSlackMessages, htmlParser, httpClient, httpGet, httpPost, ipValidator, jsonMerge, jsonParser, jsonQuery, jsonStringify, jsonToCsv, jsonToXml, jsonValidator, mathFunctions, notifySlack, objectOmit, objectPick, pathBasename, pathDirname, pathExtension, pathJoin, pathNormalize, pathParse, pathRelative, pathResolve, phoneValidator, randomNumber, searchResultSchema, sendSlackMessage, slackTools, statistics, stringCaseConverter, stringJoin, stringLength, stringReplace, stringSplit, stringSubstring, stringTrim, urlBuilder, urlQueryParser, urlValidator, urlValidatorSimple, uuidValidator, webScraper, webSearch, webSearchOutputSchema, webSearchSchema, xmlGenerator, xmlParser, xmlToJson };
2824
+ export { AskHumanInputSchema, DuckDuckGoProvider, SerperProvider, archiveConfluencePage, arrayFilter, arrayGroupBy, arrayMap, arraySort, askHumanTool, calculator, confluenceTools, createAskHumanTool, createConfluencePage, createConfluenceTools, createDuckDuckGoProvider, createSerperProvider, createSlackTools, creditCardValidator, csvGenerator, csvParser, csvToJson, currentDateTime, dateArithmetic, dateComparison, dateDifference, dateFormatter, directoryCreate, directoryDelete, directoryList, emailValidator, extractImages, extractLinks, fileAppend, fileDelete, fileExists, fileReader, fileSearch, fileWriter, getConfluencePage, getSlackChannels, getSlackMessages, getSpacePages, htmlParser, httpClient, httpGet, httpPost, ipValidator, jsonMerge, jsonParser, jsonQuery, jsonStringify, jsonToCsv, jsonToXml, jsonValidator, listConfluenceSpaces, mathFunctions, notifySlack, objectOmit, objectPick, pathBasename, pathDirname, pathExtension, pathJoin, pathNormalize, pathParse, pathRelative, pathResolve, phoneValidator, randomNumber, searchConfluence, searchResultSchema, sendSlackMessage, slackTools, statistics, stringCaseConverter, stringJoin, stringLength, stringReplace, stringSplit, stringSubstring, stringTrim, updateConfluencePage, urlBuilder, urlQueryParser, urlValidator, urlValidatorSimple, uuidValidator, webScraper, webSearch, webSearchOutputSchema, webSearchSchema, xmlGenerator, xmlParser, xmlToJson };
2325
2825
  //# sourceMappingURL=index.js.map
2326
2826
  //# sourceMappingURL=index.js.map