abtars 0.2.0 → 0.2.1-alpha.10
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/README.md +15 -18
- package/bundle/{_registry.generated-6GO2PAMD.js → _registry.generated-4P6KTBTH.js} +8 -8
- package/bundle/_registry.generated-G2FSGHNY.js +36 -0
- package/bundle/_registry.generated-G2FSGHNY.js.map +7 -0
- package/bundle/_registry.generated-N74SMTUJ.js +36 -0
- package/bundle/_registry.generated-N74SMTUJ.js.map +7 -0
- package/bundle/_registry.generated-Y4VT5MBX.js +36 -0
- package/bundle/_registry.generated-Y4VT5MBX.js.map +7 -0
- package/bundle/abtars-browser.js +0 -1
- package/bundle/abtars-browser.js.map +2 -2
- package/bundle/abtars-cli.js +589 -547
- package/bundle/abtars-cli.js.map +4 -4
- package/bundle/abtars-restart.js +1 -1
- package/bundle/abtars-rss.js +0 -1
- package/bundle/abtars-rss.js.map +2 -2
- package/bundle/abtars-task.js +1 -2
- package/bundle/abtars-task.js.map +2 -2
- package/bundle/abtars.js +58 -33
- package/bundle/abtars.js.map +2 -2
- package/bundle/{agent-registry-SYUFNSVB.js → agent-registry-TM7EISOV.js} +2 -2
- package/bundle/{browse-delivery-64GQIUHG.js → browse-delivery-VTLEAVYA.js} +4 -4
- package/bundle/{browser-5H2Q7GEC.js → browser-JQGYFZAG.js} +5 -5
- package/bundle/browser-M4KDLN75.js +19 -0
- package/bundle/browser-REIXOJ6S.js +19 -0
- package/bundle/browser-VG2GTEND.js +19 -0
- package/bundle/{chunk-KFENC7BM.js → chunk-4YOTNYAE.js} +2 -2
- package/bundle/{chunk-KWBGYWDO.js → chunk-7I5C2U3C.js} +1 -1
- package/bundle/chunk-7I5C2U3C.js.map +7 -0
- package/bundle/{chunk-7STAQF5O.js → chunk-CNWXVXGH.js} +4 -4
- package/bundle/{chunk-7STAQF5O.js.map → chunk-CNWXVXGH.js.map} +2 -2
- package/bundle/{chunk-JX3ZZU3O.js → chunk-CU3O53U3.js} +28 -14
- package/bundle/chunk-CU3O53U3.js.map +7 -0
- package/bundle/chunk-EZZBO2QK.js +85 -0
- package/bundle/chunk-EZZBO2QK.js.map +7 -0
- package/bundle/{chunk-XLLSPBBT.js → chunk-GPL57SRN.js} +2 -2
- package/bundle/chunk-GPL57SRN.js.map +7 -0
- package/bundle/{chunk-PQ62LZNA.js → chunk-HEHD3GG5.js} +2 -2
- package/bundle/{chunk-A5OJYQNU.js → chunk-HTGVYNPE.js} +4 -4
- package/bundle/{chunk-WUTCGJDZ.js → chunk-HZRUBJ4Q.js} +148 -9
- package/bundle/chunk-HZRUBJ4Q.js.map +7 -0
- package/bundle/{chunk-ZVDVNSXK.js → chunk-J7CFCY4U.js} +2 -2
- package/bundle/{chunk-HXJRZWKA.js → chunk-JRK3UFBS.js} +106 -58
- package/bundle/chunk-JRK3UFBS.js.map +7 -0
- package/bundle/{chunk-GZUQQWBZ.js → chunk-KJOCXWJ5.js} +3 -3
- package/bundle/chunk-KJOCXWJ5.js.map +7 -0
- package/bundle/{chunk-K7P74UNQ.js → chunk-LDKSCXGL.js} +3 -3
- package/bundle/{chunk-K7P74UNQ.js.map → chunk-LDKSCXGL.js.map} +2 -2
- package/bundle/chunk-MNKLPRGY.js +138 -0
- package/bundle/chunk-MNKLPRGY.js.map +7 -0
- package/bundle/chunk-O73EZGKR.js +135 -0
- package/bundle/chunk-O73EZGKR.js.map +7 -0
- package/bundle/{chunk-OZ4IZFV4.js → chunk-Q7F5R2LL.js} +1 -1
- package/bundle/{chunk-OZ4IZFV4.js.map → chunk-Q7F5R2LL.js.map} +2 -2
- package/bundle/{chunk-XOCP5BMO.js → chunk-URAQLQ2U.js} +2 -2
- package/bundle/chunk-URAQLQ2U.js.map +7 -0
- package/bundle/{chunk-PPSB2ZIN.js → chunk-VREI2GUO.js} +18 -7
- package/bundle/chunk-VREI2GUO.js.map +7 -0
- package/bundle/chunk-VYR25H37.js +135 -0
- package/bundle/chunk-VYR25H37.js.map +7 -0
- package/bundle/{commands-E3Y4QUNF.js → commands-J6JAZ7D2.js} +5 -5
- package/bundle/{deploy-lib-import-ODLDL2DB.js → deploy-lib-import-PJXUADPS.js} +18 -16
- package/bundle/{direct-api-transport-TRV45NO6.js → direct-api-transport-ZSJHKYBX.js} +1 -1
- package/bundle/direct-api-transport-ZSJHKYBX.js.map +7 -0
- package/bundle/{discord-adapter-5DS7UTBE.js → discord-adapter-OCWSJTJU.js} +8 -8
- package/bundle/{doctor-R54GZPKL.js → doctor-XOGVHA4W.js} +13 -2
- package/bundle/{doctor-R54GZPKL.js.map → doctor-XOGVHA4W.js.map} +2 -2
- package/bundle/{install-RSLOS3Q5.js → install-6H3APAIJ.js} +3 -3
- package/bundle/{irc-adapter-RKRUSZXB.js → irc-adapter-AIEP6OX6.js} +6 -2
- package/bundle/irc-adapter-AIEP6OX6.js.map +7 -0
- package/bundle/{message-pipeline-CFVO73CK.js → message-pipeline-TCPHRBAK.js} +5 -5
- package/bundle/meta.json +4005 -3868
- package/bundle/{phase-transport-FEZ4SIJJ.js → phase-transport-ME2XDRR2.js} +3 -3
- package/bundle/restore-UH2UE2K5.js +151 -0
- package/bundle/restore-UH2UE2K5.js.map +7 -0
- package/bundle/rollback-D7AYTC7Z.js +11 -0
- package/bundle/{sleep-BPWX3FCN.js → sleep-IOWYTSMK.js} +2 -2
- package/bundle/{soul-bundle-BRIUDEQ2.js → soul-bundle-AH5S3MVI.js} +2 -2
- package/bundle/{soul-loader-GBXJ7EBH.js → soul-loader-N5FA4I6C.js} +3 -3
- package/bundle/soul-loader-N5FA4I6C.js.map +7 -0
- package/bundle/{start-4IWBKLWO.js → start-CBVKNEAT.js} +1 -1
- package/bundle/{subagent-runtime-MDBO6LHS.js → subagent-runtime-OOJXCKJF.js} +2 -2
- package/bundle/subagent-runtime-OOJXCKJF.js.map +7 -0
- package/bundle/{system-status-WAY63BYC.js → system-status-4JP36OKC.js} +12 -5
- package/bundle/{system-status-WAY63BYC.js.map → system-status-4JP36OKC.js.map} +2 -2
- package/bundle/{task-store-KIBFZL5A.js → task-store-LC7ZMS72.js} +2 -2
- package/bundle/task-store-LC7ZMS72.js.map +7 -0
- package/bundle/{telegram-adapter-MVA33IO2.js → telegram-adapter-QXHJQLLX.js} +5 -5
- package/bundle/{update-check-O5MS6B3L.js → update-check-XVY2IK2L.js} +2 -2
- package/bundle/update-check-XVY2IK2L.js.map +7 -0
- package/core/skills/tools/rss/SKILL.md +51 -0
- package/install-manifest.json +4 -3
- package/package.json +3 -4
- package/scripts/abtars-daemon.service +1 -1
- package/scripts/abtars-watchdog.service +1 -1
- package/scripts/abtars.sh +3 -5
- package/scripts/abtars@.service +1 -1
- package/scripts/build-and-deploy.sh +6 -0
- package/scripts/com.abtars.daemon.plist +1 -1
- package/scripts/com.abtars.watchdog.plist +1 -1
- package/scripts/daily-backup.sh +1 -61
- package/scripts/doctor.sh +48 -33
- package/scripts/watchdog.sh +53 -8
- package/bundle/chunk-GZUQQWBZ.js.map +0 -7
- package/bundle/chunk-HXJRZWKA.js.map +0 -7
- package/bundle/chunk-JX3ZZU3O.js.map +0 -7
- package/bundle/chunk-KWBGYWDO.js.map +0 -7
- package/bundle/chunk-PPSB2ZIN.js.map +0 -7
- package/bundle/chunk-WUTCGJDZ.js.map +0 -7
- package/bundle/chunk-XLLSPBBT.js.map +0 -7
- package/bundle/chunk-XOCP5BMO.js.map +0 -7
- package/bundle/direct-api-transport-TRV45NO6.js.map +0 -7
- package/bundle/irc-adapter-RKRUSZXB.js.map +0 -7
- package/bundle/passwd-QSHZJ2CG.js +0 -134
- package/bundle/passwd-QSHZJ2CG.js.map +0 -7
- package/bundle/restore-ROJF22R2.js +0 -47
- package/bundle/restore-ROJF22R2.js.map +0 -7
- package/core/core_templates/SOUL.md +0 -24
- package/core/core_templates/agent_notes.md +0 -7
- package/core/core_templates/core_facts.md +0 -10
- package/core/core_templates/user_profile.md +0 -7
- package/core/skills/tools/fxtwitter/SKILL.md +0 -52
- package/core/skills/tools/twitterX/SKILL.md +0 -52
- package/core/skills/tools/twitterX/scripts/abtars-tweet.js +0 -532
- package/core/skills/tools/twitterX/scripts/package.json +0 -1
- /package/bundle/{_registry.generated-6GO2PAMD.js.map → _registry.generated-4P6KTBTH.js.map} +0 -0
- /package/bundle/{agent-registry-SYUFNSVB.js.map → agent-registry-TM7EISOV.js.map} +0 -0
- /package/bundle/{browse-delivery-64GQIUHG.js.map → browse-delivery-VTLEAVYA.js.map} +0 -0
- /package/bundle/{browser-5H2Q7GEC.js.map → browser-JQGYFZAG.js.map} +0 -0
- /package/bundle/{commands-E3Y4QUNF.js.map → browser-M4KDLN75.js.map} +0 -0
- /package/bundle/{deploy-lib-import-ODLDL2DB.js.map → browser-REIXOJ6S.js.map} +0 -0
- /package/bundle/{install-RSLOS3Q5.js.map → browser-VG2GTEND.js.map} +0 -0
- /package/bundle/{chunk-KFENC7BM.js.map → chunk-4YOTNYAE.js.map} +0 -0
- /package/bundle/{chunk-PQ62LZNA.js.map → chunk-HEHD3GG5.js.map} +0 -0
- /package/bundle/{chunk-A5OJYQNU.js.map → chunk-HTGVYNPE.js.map} +0 -0
- /package/bundle/{chunk-ZVDVNSXK.js.map → chunk-J7CFCY4U.js.map} +0 -0
- /package/bundle/{message-pipeline-CFVO73CK.js.map → commands-J6JAZ7D2.js.map} +0 -0
- /package/bundle/{phase-transport-FEZ4SIJJ.js.map → deploy-lib-import-PJXUADPS.js.map} +0 -0
- /package/bundle/{discord-adapter-5DS7UTBE.js.map → discord-adapter-OCWSJTJU.js.map} +0 -0
- /package/bundle/{sleep-BPWX3FCN.js.map → install-6H3APAIJ.js.map} +0 -0
- /package/bundle/{soul-bundle-BRIUDEQ2.js.map → message-pipeline-TCPHRBAK.js.map} +0 -0
- /package/bundle/{soul-loader-GBXJ7EBH.js.map → phase-transport-ME2XDRR2.js.map} +0 -0
- /package/bundle/{subagent-runtime-MDBO6LHS.js.map → rollback-D7AYTC7Z.js.map} +0 -0
- /package/bundle/{task-store-KIBFZL5A.js.map → sleep-IOWYTSMK.js.map} +0 -0
- /package/bundle/{update-check-O5MS6B3L.js.map → soul-bundle-AH5S3MVI.js.map} +0 -0
- /package/bundle/{start-4IWBKLWO.js.map → start-CBVKNEAT.js.map} +0 -0
- /package/bundle/{telegram-adapter-MVA33IO2.js.map → telegram-adapter-QXHJQLLX.js.map} +0 -0
package/bundle/abtars-restart.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
3
3
|
import {
|
|
4
4
|
restart
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-URAQLQ2U.js";
|
|
6
6
|
import "./chunk-EX2SRTUE.js";
|
|
7
7
|
import "./chunk-2BY6I4P5.js";
|
|
8
8
|
import "./chunk-MJ6PHMOK.js";
|
package/bundle/abtars-rss.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
1
|
#!/usr/bin/env node
|
|
3
2
|
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
4
3
|
|
package/bundle/abtars-rss.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/cli/abtars-rss.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["/**\n * abtars-rss \u2014 fetch RSS/Atom feeds, output JSON\n *\n * Usage:\n * abtars-rss # fetch all feeds, output today's JSON\n * abtars-rss --hours 48 # look back 48h instead of 24\n *\n * Reads:\n * ~/.abtars/finance/feeds.json # feed URLs + optional keyword filters\n * ~/.abtars/finance/stock_watchlist.md # active tickers \u2192 Seeking Alpha RSS\n *\n * Writes:\n * ~/.abtars/finance/rss-YYYY-MM-DD.json\n */\n\nimport { readFileSync, writeFileSync, mkdirSync, existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\n\nconst FINANCE_DIR = join(homedir(), \".abtars\", \"workspace\", \"finance\");\nconst FEEDS_FILE = join(FINANCE_DIR, \"feeds.json\");\nconst WATCHLIST_FILE = join(FINANCE_DIR, \"stock_watchlist.md\");\n\ninterface FeedConfig {\n url: string;\n name: string;\n keywords?: string[];\n}\n\ninterface RssItem {\n title: string;\n link: string;\n summary: string;\n date: string;\n source: string;\n}\n\nconst DEFAULT_FEEDS: FeedConfig[] = [\n {\n url: \"https://news.google.com/rss/search?q=%22artificial+intelligence%22+AND+(%22earnings%22+OR+%22guidance%22+OR+%22stock%22+OR+%22funding%22)&hl=en-US&gl=US&ceid=US:en\",\n name: \"Google News AI Finance\",\n },\n {\n url: \"https://www.cnbc.com/id/19854910/device/rss/rss.html\",\n name: \"CNBC Technology\",\n },\n {\n url: \"https://www.cnbc.com/id/15839069/device/rss/rss.html\",\n name: \"CNBC Investing\",\n },\n {\n url: \"https://efts.sec.gov/LATEST/search-index?q=%22artificial+intelligence%22+OR+%22GPU%22+OR+%22machine+learning%22&forms=8-K&dateRange=custom&category=form-type\",\n name: \"SEC EDGAR 8-K AI\",\n keywords: [\"artificial intelligence\", \"AI\", \"GPU\", \"machine learning\"],\n },\n];\n\nconst UA = \"AgentBridge-RSS/1.0\";\n\nfunction tag(xml: string, name: string): string {\n const m = xml.match(new RegExp(`<${name}[^>]*>(?:<!\\\\[CDATA\\\\[)?([\\\\s\\\\S]*?)(?:\\\\]\\\\]>)?</${name}>`, \"i\"));\n return m?.[1]?.trim() ?? \"\";\n}\n\nfunction attrHref(xml: string): string {\n const m = xml.match(/<link[^>]+href=\"([^\"]+)\"/i);\n return m?.[1] ?? \"\";\n}\n\nfunction parseXmlFeed(xml: string, source: string): RssItem[] {\n const items: RssItem[] = [];\n\n // RSS <item> elements\n const rssItems = xml.matchAll(/<item>([\\s\\S]*?)<\\/item>/gi);\n for (const m of rssItems) {\n const c = m[1] ?? \"\";\n items.push({\n title: tag(c, \"title\"),\n link: tag(c, \"link\") || attrHref(c),\n summary: tag(c, \"description\").replace(/<[^>]+>/g, \"\").slice(0, 300),\n date: tag(c, \"pubDate\"),\n source,\n });\n }\n\n // Atom <entry> elements\n const atomEntries = xml.matchAll(/<entry>([\\s\\S]*?)<\\/entry>/gi);\n for (const m of atomEntries) {\n const c = m[1] ?? \"\";\n items.push({\n title: tag(c, \"title\"),\n link: attrHref(c) || tag(c, \"link\"),\n summary: (tag(c, \"summary\") || tag(c, \"content\")).replace(/<[^>]+>/g, \"\").slice(0, 300),\n date: tag(c, \"updated\") || tag(c, \"published\"),\n source,\n });\n }\n\n return items;\n}\n\nfunction parseEdgarJson(json: string, source: string): RssItem[] {\n try {\n const data = JSON.parse(json);\n const hits = data.hits?.hits ?? [];\n return hits.map((h: any) => ({\n title: h._source?.display_names?.join(\", \") + \" \u2014 \" + h._source?.form_type,\n link: `https://www.sec.gov/Archives/edgar/data/${h._source?.entity_id}/${h._source?.file_num}`,\n summary: (h._source?.file_description ?? \"\").slice(0, 300),\n date: h._source?.file_date ?? \"\",\n source,\n }));\n } catch {\n return [];\n }\n}\n\nasync function fetchFeed(url: string): Promise<string> {\n const res = await fetch(url, { headers: { \"User-Agent\": UA }, signal: AbortSignal.timeout(15000) });\n if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);\n return res.text();\n}\n\nfunction parseActiveTickers(): string[] {\n if (!existsSync(WATCHLIST_FILE)) return [];\n const content = readFileSync(WATCHLIST_FILE, \"utf-8\");\n const section = content.match(/## Active\\n([\\s\\S]*?)(?=\\n## |$)/);\n if (!section?.[1]) return [];\n const tickers: string[] = [];\n for (const line of section[1].split(\"\\n\")) {\n const m = line.match(/^- (\\w+)/);\n if (m?.[1]) tickers.push(m[1]);\n }\n return tickers;\n}\n\nfunction filterByAge(items: RssItem[], hours: number): RssItem[] {\n const cutoff = Date.now() - hours * 60 * 60 * 1000;\n return items.filter((item) => {\n if (!item.date) return true; // keep items without dates\n const ts = new Date(item.date).getTime();\n return isNaN(ts) || ts > cutoff;\n });\n}\n\nfunction filterByKeywords(items: RssItem[], keywords: string[]): RssItem[] {\n if (keywords.length === 0) return items;\n const lower = keywords.map((k) => k.toLowerCase());\n return items.filter((item) => {\n const text = `${item.title} ${item.summary}`.toLowerCase();\n return lower.some((kw) => text.includes(kw));\n });\n}\n\nasync function main(): Promise<void> {\n const hours = parseInt(process.argv.find((_, i, a) => a[i - 1] === \"--hours\") ?? \"24\", 10);\n\n mkdirSync(FINANCE_DIR, { recursive: true });\n\n // Init feeds.json if missing\n if (!existsSync(FEEDS_FILE)) {\n writeFileSync(FEEDS_FILE, JSON.stringify(DEFAULT_FEEDS, null, 2), \"utf-8\");\n console.error(`Created default ${FEEDS_FILE}`);\n }\n\n const feeds: FeedConfig[] = JSON.parse(readFileSync(FEEDS_FILE, \"utf-8\"));\n\n // Add Seeking Alpha feeds for active tickers\n const tickers = parseActiveTickers();\n for (const t of tickers) {\n feeds.push({\n url: `https://seekingalpha.com/api/sa/combined/${t}.xml`,\n name: `SeekingAlpha:${t}`,\n });\n }\n\n console.error(`Fetching ${feeds.length} feeds (${tickers.length} tickers)...`);\n\n const allItems: RssItem[] = [];\n\n for (const feed of feeds) {\n try {\n console.error(` ${feed.name}...`);\n const body = await fetchFeed(feed.url);\n\n let items: RssItem[];\n if (body.trimStart().startsWith(\"{\")) {\n items = parseEdgarJson(body, feed.name);\n } else {\n items = parseXmlFeed(body, feed.name);\n }\n\n if (feed.keywords) items = filterByKeywords(items, feed.keywords);\n allItems.push(...items);\n } catch (e: any) {\n console.error(` \u26A0 ${feed.name} failed: ${e.message}`);\n }\n }\n\n const filtered = filterByAge(allItems, hours);\n\n // Dedup by title similarity\n const seen = new Set<string>();\n const deduped = filtered.filter((item) => {\n const key = item.title.toLowerCase().replace(/[^a-z0-9]/g, \"\").slice(0, 60);\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n\n const date = new Date().toISOString().slice(0, 10);\n const outFile = join(FINANCE_DIR, `rss-${date}.json`);\n const payload = { date, hours, totalFeeds: feeds.length, tickers, totalItems: deduped.length, items: deduped };\n writeFileSync(outFile, JSON.stringify(payload, null, 2), \"utf-8\");\n\n console.error(`\uD83D\uDCC4 ${deduped.length} items written to ${outFile}`);\n console.log(JSON.stringify(payload, null, 2));\n}\n\nmain().catch((err) => {\n console.error(`Fatal: ${err.message}`);\n process.exit(1);\n});\n"],
|
|
5
|
+
"mappings": ";;;;AAeA,SAAS,cAAc,eAAe,WAAW,kBAAkB;AACnE,SAAS,YAAY;AACrB,SAAS,eAAe;AAExB,IAAM,cAAc,KAAK,QAAQ,GAAG,WAAW,aAAa,SAAS;AACrE,IAAM,aAAa,KAAK,aAAa,YAAY;AACjD,IAAM,iBAAiB,KAAK,aAAa,oBAAoB;AAgB7D,IAAM,gBAA8B;AAAA,EAClC;AAAA,IACE,KAAK;AAAA,IACL,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,MAAM;AAAA,IACN,UAAU,CAAC,2BAA2B,MAAM,OAAO,kBAAkB;AAAA,EACvE;AACF;AAEA,IAAM,KAAK;AAEX,SAAS,IAAI,KAAa,MAAsB;AAC9C,QAAM,IAAI,IAAI,MAAM,IAAI,OAAO,IAAI,IAAI,qDAAqD,IAAI,KAAK,GAAG,CAAC;AACzG,SAAO,IAAI,CAAC,GAAG,KAAK,KAAK;AAC3B;AAEA,SAAS,SAAS,KAAqB;AACrC,QAAM,IAAI,IAAI,MAAM,2BAA2B;AAC/C,SAAO,IAAI,CAAC,KAAK;AACnB;AAEA,SAAS,aAAa,KAAa,QAA2B;AAC5D,QAAM,QAAmB,CAAC;AAG1B,QAAM,WAAW,IAAI,SAAS,4BAA4B;AAC1D,aAAW,KAAK,UAAU;AACxB,UAAM,IAAI,EAAE,CAAC,KAAK;AAClB,UAAM,KAAK;AAAA,MACT,OAAO,IAAI,GAAG,OAAO;AAAA,MACrB,MAAM,IAAI,GAAG,MAAM,KAAK,SAAS,CAAC;AAAA,MAClC,SAAS,IAAI,GAAG,aAAa,EAAE,QAAQ,YAAY,EAAE,EAAE,MAAM,GAAG,GAAG;AAAA,MACnE,MAAM,IAAI,GAAG,SAAS;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AAGA,QAAM,cAAc,IAAI,SAAS,8BAA8B;AAC/D,aAAW,KAAK,aAAa;AAC3B,UAAM,IAAI,EAAE,CAAC,KAAK;AAClB,UAAM,KAAK;AAAA,MACT,OAAO,IAAI,GAAG,OAAO;AAAA,MACrB,MAAM,SAAS,CAAC,KAAK,IAAI,GAAG,MAAM;AAAA,MAClC,UAAU,IAAI,GAAG,SAAS,KAAK,IAAI,GAAG,SAAS,GAAG,QAAQ,YAAY,EAAE,EAAE,MAAM,GAAG,GAAG;AAAA,MACtF,MAAM,IAAI,GAAG,SAAS,KAAK,IAAI,GAAG,WAAW;AAAA,MAC7C;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,SAAS,eAAe,MAAc,QAA2B;AAC/D,MAAI;AACF,UAAM,OAAO,KAAK,MAAM,IAAI;AAC5B,UAAM,OAAO,KAAK,MAAM,QAAQ,CAAC;AACjC,WAAO,KAAK,IAAI,CAAC,OAAY;AAAA,MAC3B,OAAO,EAAE,SAAS,eAAe,KAAK,IAAI,IAAI,aAAQ,EAAE,SAAS;AAAA,MACjE,MAAM,2CAA2C,EAAE,SAAS,SAAS,IAAI,EAAE,SAAS,QAAQ;AAAA,MAC5F,UAAU,EAAE,SAAS,oBAAoB,IAAI,MAAM,GAAG,GAAG;AAAA,MACzD,MAAM,EAAE,SAAS,aAAa;AAAA,MAC9B;AAAA,IACF,EAAE;AAAA,EACJ,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,eAAe,UAAU,KAA8B;AACrD,QAAM,MAAM,MAAM,MAAM,KAAK,EAAE,SAAS,EAAE,cAAc,GAAG,GAAG,QAAQ,YAAY,QAAQ,IAAK,EAAE,CAAC;AAClG,MAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,UAAU,EAAE;AAC9D,SAAO,IAAI,KAAK;AAClB;AAEA,SAAS,qBAA+B;AACtC,MAAI,CAAC,WAAW,cAAc,EAAG,QAAO,CAAC;AACzC,QAAM,UAAU,aAAa,gBAAgB,OAAO;AACpD,QAAM,UAAU,QAAQ,MAAM,kCAAkC;AAChE,MAAI,CAAC,UAAU,CAAC,EAAG,QAAO,CAAC;AAC3B,QAAM,UAAoB,CAAC;AAC3B,aAAW,QAAQ,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG;AACzC,UAAM,IAAI,KAAK,MAAM,UAAU;AAC/B,QAAI,IAAI,CAAC,EAAG,SAAQ,KAAK,EAAE,CAAC,CAAC;AAAA,EAC/B;AACA,SAAO;AACT;AAEA,SAAS,YAAY,OAAkB,OAA0B;AAC/D,QAAM,SAAS,KAAK,IAAI,IAAI,QAAQ,KAAK,KAAK;AAC9C,SAAO,MAAM,OAAO,CAAC,SAAS;AAC5B,QAAI,CAAC,KAAK,KAAM,QAAO;AACvB,UAAM,KAAK,IAAI,KAAK,KAAK,IAAI,EAAE,QAAQ;AACvC,WAAO,MAAM,EAAE,KAAK,KAAK;AAAA,EAC3B,CAAC;AACH;AAEA,SAAS,iBAAiB,OAAkB,UAA+B;AACzE,MAAI,SAAS,WAAW,EAAG,QAAO;AAClC,QAAM,QAAQ,SAAS,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC;AACjD,SAAO,MAAM,OAAO,CAAC,SAAS;AAC5B,UAAM,OAAO,GAAG,KAAK,KAAK,IAAI,KAAK,OAAO,GAAG,YAAY;AACzD,WAAO,MAAM,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;AAAA,EAC7C,CAAC;AACH;AAEA,eAAe,OAAsB;AACnC,QAAM,QAAQ,SAAS,QAAQ,KAAK,KAAK,CAAC,GAAG,GAAG,MAAM,EAAE,IAAI,CAAC,MAAM,SAAS,KAAK,MAAM,EAAE;AAEzF,YAAU,aAAa,EAAE,WAAW,KAAK,CAAC;AAG1C,MAAI,CAAC,WAAW,UAAU,GAAG;AAC3B,kBAAc,YAAY,KAAK,UAAU,eAAe,MAAM,CAAC,GAAG,OAAO;AACzE,YAAQ,MAAM,mBAAmB,UAAU,EAAE;AAAA,EAC/C;AAEA,QAAM,QAAsB,KAAK,MAAM,aAAa,YAAY,OAAO,CAAC;AAGxE,QAAM,UAAU,mBAAmB;AACnC,aAAW,KAAK,SAAS;AACvB,UAAM,KAAK;AAAA,MACT,KAAK,4CAA4C,CAAC;AAAA,MAClD,MAAM,gBAAgB,CAAC;AAAA,IACzB,CAAC;AAAA,EACH;AAEA,UAAQ,MAAM,YAAY,MAAM,MAAM,WAAW,QAAQ,MAAM,cAAc;AAE7E,QAAM,WAAsB,CAAC;AAE7B,aAAW,QAAQ,OAAO;AACxB,QAAI;AACF,cAAQ,MAAM,KAAK,KAAK,IAAI,KAAK;AACjC,YAAM,OAAO,MAAM,UAAU,KAAK,GAAG;AAErC,UAAI;AACJ,UAAI,KAAK,UAAU,EAAE,WAAW,GAAG,GAAG;AACpC,gBAAQ,eAAe,MAAM,KAAK,IAAI;AAAA,MACxC,OAAO;AACL,gBAAQ,aAAa,MAAM,KAAK,IAAI;AAAA,MACtC;AAEA,UAAI,KAAK,SAAU,SAAQ,iBAAiB,OAAO,KAAK,QAAQ;AAChE,eAAS,KAAK,GAAG,KAAK;AAAA,IACxB,SAAS,GAAQ;AACf,cAAQ,MAAM,YAAO,KAAK,IAAI,YAAY,EAAE,OAAO,EAAE;AAAA,IACvD;AAAA,EACF;AAEA,QAAM,WAAW,YAAY,UAAU,KAAK;AAG5C,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,UAAU,SAAS,OAAO,CAAC,SAAS;AACxC,UAAM,MAAM,KAAK,MAAM,YAAY,EAAE,QAAQ,cAAc,EAAE,EAAE,MAAM,GAAG,EAAE;AAC1E,QAAI,KAAK,IAAI,GAAG,EAAG,QAAO;AAC1B,SAAK,IAAI,GAAG;AACZ,WAAO;AAAA,EACT,CAAC;AAED,QAAM,QAAO,oBAAI,KAAK,GAAE,YAAY,EAAE,MAAM,GAAG,EAAE;AACjD,QAAM,UAAU,KAAK,aAAa,OAAO,IAAI,OAAO;AACpD,QAAM,UAAU,EAAE,MAAM,OAAO,YAAY,MAAM,QAAQ,SAAS,YAAY,QAAQ,QAAQ,OAAO,QAAQ;AAC7G,gBAAc,SAAS,KAAK,UAAU,SAAS,MAAM,CAAC,GAAG,OAAO;AAEhE,UAAQ,MAAM,aAAM,QAAQ,MAAM,qBAAqB,OAAO,EAAE;AAChE,UAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC9C;AAEA,KAAK,EAAE,MAAM,CAAC,QAAQ;AACpB,UAAQ,MAAM,UAAU,IAAI,OAAO,EAAE;AACrC,UAAQ,KAAK,CAAC;AAChB,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/bundle/abtars-task.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
1
|
#!/usr/bin/env node
|
|
3
2
|
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
4
3
|
import {
|
|
@@ -9,7 +8,7 @@ import {
|
|
|
9
8
|
readEntry,
|
|
10
9
|
removeEntry,
|
|
11
10
|
writeEntry
|
|
12
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-GPL57SRN.js";
|
|
13
12
|
import {
|
|
14
13
|
localISO
|
|
15
14
|
} from "./chunk-MZWMYN4O.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/cli/abtars-task.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["/**\n * abtars-task \u2014 schedule time-based reminders and tasks.\n *\n * Usage:\n * abtars-task add --at \"2026-03-16T08:00\" --message \"Remind about cookies\" --chat-id 7773842843 --type reminder\n * abtars-task list\n * abtars-task remove <id>\n *\n * File: ~/.abtars/tasks/tasks.json\n */\n\nimport { localISO } from \"../utils/local-time.js\";\nimport { randomBytes } from \"node:crypto\";\nimport { readEntries as dbReadEntries, readEntry, writeEntry, removeEntry as dbRemoveEntry } from \"../components/tasks/task-store.js\";\n\n\nexport interface CronEntry {\n id: string;\n title?: string;\n fireAt: number;\n message: string;\n chatId: number;\n type: \"reminder\" | \"task\";\n executor?: \"agent\" | \"script\";\n schedule?: string;\n catchUp?: number; // hours: max delay after fireAt before skipping to next. 0 = no catch-up (default).\n priority?: \"high\" | \"medium\" | \"low\";\n taskFile?: string;\n paused?: boolean;\n maxRunsPerDay?: number;\n consecutiveFails?: number;\n agentFollowUp?: boolean;\n agentMessage?: string;\n fired: boolean;\n createdAt: number;\n lastRanAt?: number;\n retryAfter?: number;\n _prevFireAt?: number;\n _retrying?: boolean;\n history?: { ts: number; exitCode?: number }[];\n}\n\nexport function readEntries(): CronEntry[] {\n return dbReadEntries();\n}\n\ninterface AddArgs {\n at?: string;\n message?: string;\n chatId?: string;\n type?: string;\n executor?: string;\n schedule?: string;\n}\n\nfunction parseAddArgs(args: string[]): AddArgs {\n const parsed: AddArgs = {};\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--at\": parsed.at = args[++i] ?? \"\"; break;\n case \"--message\": parsed.message = args[++i] ?? \"\"; break;\n case \"--chat-id\": parsed.chatId = args[++i] ?? \"\"; break;\n case \"--type\": parsed.type = args[++i] ?? \"\"; break;\n case \"--executor\": parsed.executor = args[++i] ?? \"\"; break;\n case \"--schedule\": parsed.schedule = args[++i] ?? \"\"; break;\n }\n }\n return parsed;\n}\n\nimport { CronExpressionParser } from \"cron-parser\";\n\nfunction add(args: string[]): void {\n const parsed = parseAddArgs(args);\n if (!parsed.at && !parsed.schedule) { console.log(JSON.stringify({ ok: false, error: \"--at or --schedule is required\" })); process.exit(1); }\n if (parsed.at && parsed.schedule) { console.log(JSON.stringify({ ok: false, error: \"use --at (one-shot) or --schedule (recurring), not both\" })); process.exit(1); }\n if (!parsed.message) { console.log(JSON.stringify({ ok: false, error: \"--message is required\" })); process.exit(1); }\n if (!parsed.chatId) { console.log(JSON.stringify({ ok: false, error: \"--chat-id is required\" })); process.exit(1); }\n\n let fireAt: number;\n let schedule: string | undefined;\n\n if (parsed.schedule) {\n try {\n const expr = CronExpressionParser.parse(parsed.schedule);\n fireAt = expr.next().getTime();\n schedule = parsed.schedule;\n } catch {\n console.log(JSON.stringify({ ok: false, error: \"Invalid --schedule cron expression\" })); process.exit(1);\n }\n } else {\n fireAt = new Date(parsed.at!).getTime();\n if (!Number.isFinite(fireAt)) { console.log(JSON.stringify({ ok: false, error: \"Invalid --at date\" })); process.exit(1); }\n }\n\n const chatId = parseInt(parsed.chatId, 10);\n if (!Number.isFinite(chatId)) { console.log(JSON.stringify({ ok: false, error: \"Invalid --chat-id\" })); process.exit(1); }\n\n const type = (parsed.type ?? \"reminder\") as CronEntry[\"type\"];\n if (type !== \"reminder\" && type !== \"task\") { console.log(JSON.stringify({ ok: false, error: \"--type must be reminder or task\" })); process.exit(1); }\n\n const executor = (parsed.executor ?? \"agent\") as NonNullable<CronEntry[\"executor\"]>;\n if (executor !== \"agent\" && executor !== \"script\") { console.log(JSON.stringify({ ok: false, error: \"--executor must be agent or script\" })); process.exit(1); }\n\n const entry: CronEntry = {\n id: randomBytes(3).toString(\"hex\"),\n fireAt: fireAt!,\n message: parsed.message,\n chatId,\n type,\n executor,\n ...(schedule ? { schedule } : {}),\n fired: false,\n createdAt: Date.now(),\n };\n\n const entries = dbReadEntries();\n\n // Dedup: reject if a recurring entry with same schedule+message+chatId already exists\n if (schedule) {\n const dup = entries.find(e => e.schedule === schedule && e.message === entry.message && e.chatId === chatId && !e.paused);\n if (dup) { console.log(JSON.stringify({ ok: false, error: \"duplicate\", existing_id: dup.id })); process.exit(1); }\n }\n\n writeEntry(entry);\n console.log(JSON.stringify({ ok: true, action: \"added\", id: entry.id, fireAt: localISO(new Date(fireAt!)), ...(schedule ? { schedule } : {}) }));\n}\n\nfunction listEntries(): void {\n const entries = readEntries().filter(e => !e.fired || e.schedule);\n if (entries.length === 0) {\n console.log(JSON.stringify({ ok: true, entries: [], message: \"No pending cron entries\" }));\n return;\n }\n const display = entries.map(e => ({\n id: e.id,\n fireAt: localISO(new Date(e.fireAt)),\n message: e.message,\n chatId: e.chatId,\n type: e.type,\n ...(e.executor ? { executor: e.executor } : {}),\n ...(e.schedule ? { schedule: e.schedule } : {}),\n ...(e.priority ? { priority: e.priority } : {}),\n ...(e.paused ? { paused: true } : {}),\n ...(e.lastRanAt ? { lastRanAt: localISO(new Date(e.lastRanAt)) } : {}),\n ...(e.history?.length ? { history: e.history } : {}),\n }));\n console.log(JSON.stringify({ ok: true, entries: display }));\n}\n\nfunction remove(id: string): void {\n if (!dbRemoveEntry(id)) { console.log(JSON.stringify({ ok: false, error: `Entry ${id} not found` })); process.exit(1); }\n console.log(JSON.stringify({ ok: true, action: \"removed\", id }));\n}\n\nfunction pause(id: string): void {\n const entry = readEntry(id);\n if (!entry) { console.log(JSON.stringify({ ok: false, error: `Entry ${id} not found` })); process.exit(1); }\n entry.paused = true;\n writeEntry(entry);\n console.log(JSON.stringify({ ok: true, action: \"paused\", id }));\n}\n\nfunction resume(id: string): void {\n const entry = readEntry(id);\n if (!entry) { console.log(JSON.stringify({ ok: false, error: `Entry ${id} not found` })); process.exit(1); }\n entry.paused = false;\n entry.consecutiveFails = 0;\n writeEntry(entry);\n console.log(JSON.stringify({ ok: true, action: \"resumed\", id }));\n}\n\nfunction showHistory(id: string): void {\n const entry = readEntry(id);\n if (!entry) { console.log(JSON.stringify({ ok: false, error: `Entry ${id} not found` })); process.exit(1); }\n const runs = (entry.history ?? []).map(h => ({\n ranAt: localISO(new Date(h.ts)),\n ...(h.exitCode !== undefined ? { exitCode: h.exitCode } : {}),\n }));\n console.log(JSON.stringify({ ok: true, id, message: entry.message.slice(0, 80), runs }));\n}\n\n// --- CLI entry point ---\n\nexport function main(argv: string[] = process.argv): void {\n if (argv.includes('--help')) {\n console.log(`abtars-task \u2014 schedule time-based reminders and tasks.\n\nUsage:\n abtars-task add --at \"2026-03-16T08:00\" --message \"...\" --chat-id ID --type reminder\n abtars-task add --schedule \"0 9 * * *\" --message \"...\" --chat-id ID --type task\n abtars-task list\n abtars-task remove <id>\n abtars-task pause <id>\n abtars-task resume <id>\n abtars-task history <id>`);\n process.exit(0);\n }\n\n const args = argv.slice(2);\n const command = args[0];\n\n switch (command) {\n case \"add\":\n add(args.slice(1));\n break;\n case \"list\":\n listEntries();\n break;\n case \"remove\": {\n const id = args[1];\n if (!id) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task remove <id>\" })); process.exit(1); }\n remove(id);\n break;\n }\n case \"pause\": {\n const id = args[1];\n if (!id) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task pause <id>\" })); process.exit(1); }\n pause(id);\n break;\n }\n case \"resume\": {\n const id = args[1];\n if (!id) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task resume <id>\" })); process.exit(1); }\n resume(id);\n break;\n }\n case \"history\": {\n const id = args[1];\n if (!id) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task history <id>\" })); process.exit(1); }\n showHistory(id);\n break;\n }\n default:\n console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task <add|list|remove|pause|resume|history> [args]\" }));\n process.exit(1);\n }\n}\n\nconst isDirectRun = process.argv[1]?.endsWith(\"abtars-task.ts\") ||\n process.argv[1]?.endsWith(\"abtars-task.js\");\nif (isDirectRun) main();\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["readEntries"]
|
|
7
7
|
}
|
package/bundle/abtars.js
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
readPendingReminders,
|
|
8
8
|
recordRun as recordRun2,
|
|
9
9
|
require_main
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-HEHD3GG5.js";
|
|
11
11
|
import {
|
|
12
12
|
SessionManager,
|
|
13
13
|
SessionRegistry,
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
sanitizeOutbound,
|
|
17
17
|
setIdleCompactReset,
|
|
18
18
|
startSession
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-HZRUBJ4Q.js";
|
|
20
20
|
import {
|
|
21
21
|
require_extension,
|
|
22
22
|
require_permessage_deflate,
|
|
@@ -31,13 +31,13 @@ import {
|
|
|
31
31
|
phaseTransport,
|
|
32
32
|
resetAllCtxStarts,
|
|
33
33
|
updateCtxStart
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-HTGVYNPE.js";
|
|
35
35
|
import "./chunk-3MO2MDXJ.js";
|
|
36
|
-
import "./chunk-
|
|
36
|
+
import "./chunk-J7CFCY4U.js";
|
|
37
37
|
import "./chunk-RV54J75Q.js";
|
|
38
38
|
import {
|
|
39
39
|
SubagentRuntime
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-CNWXVXGH.js";
|
|
41
41
|
import {
|
|
42
42
|
createCapabilityRegistry
|
|
43
43
|
} from "./chunk-OOKLEC6V.js";
|
|
@@ -45,8 +45,8 @@ import {
|
|
|
45
45
|
sendNotification,
|
|
46
46
|
sendToMainChat
|
|
47
47
|
} from "./chunk-TYVI3ZWA.js";
|
|
48
|
-
import "./chunk-
|
|
49
|
-
import "./chunk-
|
|
48
|
+
import "./chunk-4YOTNYAE.js";
|
|
49
|
+
import "./chunk-Q7F5R2LL.js";
|
|
50
50
|
import {
|
|
51
51
|
loadAndValidateConfig
|
|
52
52
|
} from "./chunk-Q62SXS73.js";
|
|
@@ -102,7 +102,7 @@ import {
|
|
|
102
102
|
readEntry,
|
|
103
103
|
recordRun,
|
|
104
104
|
writeEntry
|
|
105
|
-
} from "./chunk-
|
|
105
|
+
} from "./chunk-GPL57SRN.js";
|
|
106
106
|
import {
|
|
107
107
|
localISO
|
|
108
108
|
} from "./chunk-MZWMYN4O.js";
|
|
@@ -669,7 +669,7 @@ async function phaseMemory(ctx) {
|
|
|
669
669
|
const memory = new mod.MemoryManager(ctx.memoryConfig);
|
|
670
670
|
await memory.initialize();
|
|
671
671
|
ctx.memory = memory;
|
|
672
|
-
|
|
672
|
+
logDebug("main", `\u{1F9E0} Memory enabled (dir=${ctx.memoryConfig.memoryDir})`);
|
|
673
673
|
return "ran";
|
|
674
674
|
} catch (err) {
|
|
675
675
|
logWarn("main", `\u26A0\uFE0F Memory init failed: ${err instanceof Error ? err.message : String(err)}. Running without persistent memory.`);
|
|
@@ -709,7 +709,7 @@ var TAG3 = "cron-queue";
|
|
|
709
709
|
var AGENT_TIMEOUT_MS = 30 * 60 * 1e3;
|
|
710
710
|
var RETRY_DELAY_MS = 10 * 60 * 1e3;
|
|
711
711
|
var PRIO_RANK = { high: 0, medium: 1, low: 2 };
|
|
712
|
-
var STATE_FILE = join3(homedir4(), ".abtars", "task-queue-state.json");
|
|
712
|
+
var STATE_FILE = join3(homedir4(), ".abtars", "state", "task-queue-state.json");
|
|
713
713
|
function persistState(current, queue) {
|
|
714
714
|
try {
|
|
715
715
|
const state = {
|
|
@@ -997,7 +997,7 @@ ${(output || "(no output)").slice(0, 500)}`);
|
|
|
997
997
|
const workspace = join3(abtarsHome(), "workspace", entry.id);
|
|
998
998
|
mkdirSync(workspace, { recursive: true });
|
|
999
999
|
process.env["WORKSPACE"] = workspace;
|
|
1000
|
-
const { SubagentRuntime: SubagentRuntime2 } = await import("./subagent-runtime-
|
|
1000
|
+
const { SubagentRuntime: SubagentRuntime2 } = await import("./subagent-runtime-OOJXCKJF.js");
|
|
1001
1001
|
const runtime = new SubagentRuntime2();
|
|
1002
1002
|
this.timeout = setTimeout(() => {
|
|
1003
1003
|
logWarn(TAG3, `\u23F1\uFE0F Agent "${entry.id}" timed out (30min) \u2014 shutting down runtime`);
|
|
@@ -1150,7 +1150,7 @@ Result: ${result}${pending}
|
|
|
1150
1150
|
Diagnose the root cause. If you can fix it programmatically (config change, script fix, token refresh), do it. If the fix requires human action (manual browser login, external service down), state clearly: "Requires human intervention: <reason>" \u2014 do NOT create a skill or suggest adding error handling (you ARE the error handling). Be concise.`;
|
|
1151
1151
|
void (async () => {
|
|
1152
1152
|
try {
|
|
1153
|
-
const { SubagentRuntime: SubagentRuntime2 } = await import("./subagent-runtime-
|
|
1153
|
+
const { SubagentRuntime: SubagentRuntime2 } = await import("./subagent-runtime-OOJXCKJF.js");
|
|
1154
1154
|
const runtime = new SubagentRuntime2();
|
|
1155
1155
|
await runtime.complete("coding", msg, { sessionType: "S" });
|
|
1156
1156
|
await runtime.shutdown();
|
|
@@ -1238,7 +1238,7 @@ Output: ${summary}`).catch((err) => logWarn("main", `Task result injection faile
|
|
|
1238
1238
|
selfHealerTask: null,
|
|
1239
1239
|
hailMary: ctx.hailMary,
|
|
1240
1240
|
rebuildTransport: async () => {
|
|
1241
|
-
const { rebuildTransport } = await import("./phase-transport-
|
|
1241
|
+
const { rebuildTransport } = await import("./phase-transport-ME2XDRR2.js");
|
|
1242
1242
|
await rebuildTransport(ctx);
|
|
1243
1243
|
},
|
|
1244
1244
|
phaseHealth: ctx.phaseHealth,
|
|
@@ -1288,7 +1288,7 @@ async function phasePlatforms(ctx) {
|
|
|
1288
1288
|
registry.register("telegram", {
|
|
1289
1289
|
configured: Boolean(config.telegram.botToken && config.telegram.allowedUserIds.size > 0),
|
|
1290
1290
|
async create() {
|
|
1291
|
-
const { TelegramAdapter } = await import("./telegram-adapter-
|
|
1291
|
+
const { TelegramAdapter } = await import("./telegram-adapter-QXHJQLLX.js");
|
|
1292
1292
|
const adapter = new TelegramAdapter(
|
|
1293
1293
|
{ botToken: config.telegram.botToken, allowedUserIds: config.telegram.allowedUserIds, pollTimeoutS: config.telegram.pollTimeoutS },
|
|
1294
1294
|
{ pipeline: pipelineDeps, conversationBuffer, transport, memory, sessionManager: ctx.sessionManager }
|
|
@@ -1327,7 +1327,7 @@ async function phasePlatforms(ctx) {
|
|
|
1327
1327
|
registry.register("discord", {
|
|
1328
1328
|
configured: Boolean(config.discord.enabled && config.discord.botToken),
|
|
1329
1329
|
async create() {
|
|
1330
|
-
const { DiscordAdapter } = await import("./discord-adapter-
|
|
1330
|
+
const { DiscordAdapter } = await import("./discord-adapter-OCWSJTJU.js");
|
|
1331
1331
|
const adapter = new DiscordAdapter(
|
|
1332
1332
|
{
|
|
1333
1333
|
botToken: config.discord.botToken,
|
|
@@ -1368,8 +1368,8 @@ async function phasePlatforms(ctx) {
|
|
|
1368
1368
|
configured: platforms.irc,
|
|
1369
1369
|
async create() {
|
|
1370
1370
|
const { loadIrcConfig } = await import("./irc-config-6VY67UPQ.js");
|
|
1371
|
-
const { IrcAdapter } = await import("./irc-adapter-
|
|
1372
|
-
const { handleInboundMessage } = await import("./message-pipeline-
|
|
1371
|
+
const { IrcAdapter } = await import("./irc-adapter-AIEP6OX6.js");
|
|
1372
|
+
const { handleInboundMessage } = await import("./message-pipeline-TCPHRBAK.js");
|
|
1373
1373
|
const ircConfig = loadIrcConfig();
|
|
1374
1374
|
if (!ircConfig) throw new Error("irc.json missing or empty");
|
|
1375
1375
|
const adapter = new IrcAdapter(ircConfig, {
|
|
@@ -1420,13 +1420,13 @@ async function phaseCapabilities(ctx) {
|
|
|
1420
1420
|
let loaded = [];
|
|
1421
1421
|
let staticCaps;
|
|
1422
1422
|
try {
|
|
1423
|
-
({ capabilities: staticCaps } = await import("./_registry.generated-
|
|
1423
|
+
({ capabilities: staticCaps } = await import("./_registry.generated-4P6KTBTH.js"));
|
|
1424
1424
|
} catch (err) {
|
|
1425
1425
|
logError("capabilities", `Registry import failed: ${err instanceof Error ? err.message : String(err)}. Loading individually.`);
|
|
1426
1426
|
staticCaps = [];
|
|
1427
1427
|
const individualCaps = [
|
|
1428
1428
|
{ name: "hotskills", load: () => import("./hotskills-6ECHLXTJ.js") },
|
|
1429
|
-
{ name: "browser", load: () => import("./browser-
|
|
1429
|
+
{ name: "browser", load: () => import("./browser-JQGYFZAG.js") }
|
|
1430
1430
|
];
|
|
1431
1431
|
for (const { name, load } of individualCaps) {
|
|
1432
1432
|
if (disabled.has(name)) continue;
|
|
@@ -1819,7 +1819,7 @@ function createSelfHealerTask(getTelegramAdapter, allowedUserIds) {
|
|
|
1819
1819
|
autoFixRunning = false;
|
|
1820
1820
|
}, 5 * 60 * 1e3);
|
|
1821
1821
|
try {
|
|
1822
|
-
const { SubagentRuntime: SubagentRuntime2 } = await import("./subagent-runtime-
|
|
1822
|
+
const { SubagentRuntime: SubagentRuntime2 } = await import("./subagent-runtime-OOJXCKJF.js");
|
|
1823
1823
|
const runtime = new SubagentRuntime2();
|
|
1824
1824
|
const result = await runtime.complete("coding", rule.instruction);
|
|
1825
1825
|
await runtime.shutdown();
|
|
@@ -1981,19 +1981,37 @@ function createAgeCheckTask(deps) {
|
|
|
1981
1981
|
}
|
|
1982
1982
|
};
|
|
1983
1983
|
}
|
|
1984
|
-
function createDbIntegrityTask(memory) {
|
|
1985
|
-
let
|
|
1984
|
+
function createDbIntegrityTask(memory, sendSystemMessage) {
|
|
1985
|
+
let lastCheckAt = 0;
|
|
1986
|
+
const INTERVAL_MS = 60 * 60 * 1e3;
|
|
1987
|
+
const MAX_FAILURES = 5;
|
|
1988
|
+
let consecutiveFailures = 0;
|
|
1989
|
+
let escalated = false;
|
|
1986
1990
|
return {
|
|
1987
1991
|
name: "db-integrity",
|
|
1988
1992
|
execute: async () => {
|
|
1989
|
-
|
|
1990
|
-
if (
|
|
1993
|
+
if (escalated) return;
|
|
1994
|
+
if (Date.now() - lastCheckAt < INTERVAL_MS) return;
|
|
1995
|
+
lastCheckAt = Date.now();
|
|
1991
1996
|
if (!memory) return;
|
|
1992
1997
|
const result = memory.maintenance.checkIntegrity();
|
|
1993
1998
|
if (result !== "ok") {
|
|
1994
1999
|
logError("db-integrity", `Memory DB integrity check failed: ${result}`);
|
|
1995
2000
|
const { rebuilt } = memory.rebuildFtsIndexes();
|
|
1996
|
-
if (rebuilt.length > 0)
|
|
2001
|
+
if (rebuilt.length > 0) {
|
|
2002
|
+
logInfo("db-integrity", `Auto-rebuilt FTS indexes: ${rebuilt.join(", ")}`);
|
|
2003
|
+
consecutiveFailures = 0;
|
|
2004
|
+
} else {
|
|
2005
|
+
consecutiveFailures++;
|
|
2006
|
+
if (consecutiveFailures >= MAX_FAILURES) {
|
|
2007
|
+
escalated = true;
|
|
2008
|
+
const msg = `\u26A0\uFE0F FTS corruption persists after ${MAX_FAILURES} rebuild attempts. Needs manual fix.`;
|
|
2009
|
+
logError("db-integrity", msg);
|
|
2010
|
+
sendSystemMessage?.(msg);
|
|
2011
|
+
}
|
|
2012
|
+
}
|
|
2013
|
+
} else {
|
|
2014
|
+
consecutiveFailures = 0;
|
|
1997
2015
|
}
|
|
1998
2016
|
}
|
|
1999
2017
|
};
|
|
@@ -2003,7 +2021,7 @@ function createUpdateCheckTask(notify) {
|
|
|
2003
2021
|
name: "update-check",
|
|
2004
2022
|
async execute() {
|
|
2005
2023
|
if (process.env["UPDATES_CHECK_ENABLED"] === "false") return;
|
|
2006
|
-
const { checkForUpdate } = await import("./update-check-
|
|
2024
|
+
const { checkForUpdate } = await import("./update-check-XVY2IK2L.js");
|
|
2007
2025
|
const { readFileSync: readFileSync7 } = await import("node:fs");
|
|
2008
2026
|
const { join: join11 } = await import("node:path");
|
|
2009
2027
|
const { abtarsHome: abtarsHome2 } = await import("./paths-ZJYIDND2.js");
|
|
@@ -2299,7 +2317,7 @@ async function phaseHeartbeat(ctx) {
|
|
|
2299
2317
|
},
|
|
2300
2318
|
cronBusy: () => cronQueue.currentJob !== null || cronQueue.pending > 0
|
|
2301
2319
|
}));
|
|
2302
|
-
heartbeat.registerTask(createDbIntegrityTask(memory));
|
|
2320
|
+
heartbeat.registerTask(createDbIntegrityTask(memory, sendSystemMessage));
|
|
2303
2321
|
heartbeat.registerTask(createSkillStatsFlushTask());
|
|
2304
2322
|
heartbeat.registerTask(createSkillTrashPruneTask());
|
|
2305
2323
|
heartbeat.registerTask(createUpdateCheckTask((msg) => {
|
|
@@ -2325,7 +2343,7 @@ async function phaseHeartbeat(ctx) {
|
|
|
2325
2343
|
}
|
|
2326
2344
|
ctx.selfHealerTask = selfHealerTask;
|
|
2327
2345
|
pipelineDeps.selfHealerTask = selfHealerTask;
|
|
2328
|
-
const { registerCommand } = await import("./commands-
|
|
2346
|
+
const { registerCommand } = await import("./commands-J6JAZ7D2.js");
|
|
2329
2347
|
for (const [name, handler2] of capabilities.commands) {
|
|
2330
2348
|
registerCommand(name, handler2);
|
|
2331
2349
|
}
|
|
@@ -2337,7 +2355,7 @@ async function phaseHeartbeat(ctx) {
|
|
|
2337
2355
|
queueMicrotask(() => {
|
|
2338
2356
|
runModelHealth().catch((err) => logAndSwallow(TAG7, "runModelHealth boot", err));
|
|
2339
2357
|
});
|
|
2340
|
-
const { checkBrowseTasks } = await import("./browse-delivery-
|
|
2358
|
+
const { checkBrowseTasks } = await import("./browse-delivery-VTLEAVYA.js");
|
|
2341
2359
|
checkBrowseTasks();
|
|
2342
2360
|
heartbeat.start();
|
|
2343
2361
|
memory?.setHeartbeat(heartbeat);
|
|
@@ -2355,8 +2373,8 @@ async function phaseSleep(ctx) {
|
|
|
2355
2373
|
logWarn("boot", `${phaseSleep.name}: skipping \u2014 heartbeat not available`);
|
|
2356
2374
|
return "skipped";
|
|
2357
2375
|
}
|
|
2358
|
-
const { createSleepHandle } = await import("./sleep-
|
|
2359
|
-
const { killWakeInhibit } = await import("./commands-
|
|
2376
|
+
const { createSleepHandle } = await import("./sleep-IOWYTSMK.js");
|
|
2377
|
+
const { killWakeInhibit } = await import("./commands-J6JAZ7D2.js");
|
|
2360
2378
|
const SLEEP_HOUR = parseInt(readEnvWithDefault("BED_TIME", "2", "bedtime hour").split(":")[0] ?? "2", 10);
|
|
2361
2379
|
let subagent = null;
|
|
2362
2380
|
const { getEnv: getEnv2 } = await import("./env-schema-XCPAJ6IZ.js");
|
|
@@ -2592,7 +2610,8 @@ var MemorySearchController = class {
|
|
|
2592
2610
|
const webResults = result.results.map(hitToWebResult);
|
|
2593
2611
|
const stageStatuses = {};
|
|
2594
2612
|
for (const [name, stage] of Object.entries(result.stages)) {
|
|
2595
|
-
|
|
2613
|
+
const s = stage;
|
|
2614
|
+
stageStatuses[name] = { status: "ok", hits: s.hits.length, ms: s.ms };
|
|
2596
2615
|
}
|
|
2597
2616
|
const response = { results: webResults, layers: stageStatuses };
|
|
2598
2617
|
return { status: 200, body: response };
|
|
@@ -2933,7 +2952,7 @@ var DashboardServer = class {
|
|
|
2933
2952
|
if (method === "GET" && pathname === "/api/cron") {
|
|
2934
2953
|
if (!this.deps.authGate.guard(req, res)) return;
|
|
2935
2954
|
try {
|
|
2936
|
-
const { readEntries: readEntries2 } = await import("./task-store-
|
|
2955
|
+
const { readEntries: readEntries2 } = await import("./task-store-LC7ZMS72.js");
|
|
2937
2956
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
2938
2957
|
res.end(JSON.stringify({ ok: true, entries: readEntries2() }));
|
|
2939
2958
|
} catch (err) {
|
|
@@ -4072,6 +4091,12 @@ process.on("uncaughtException", (err) => {
|
|
|
4072
4091
|
process.exit(1);
|
|
4073
4092
|
});
|
|
4074
4093
|
process.on("unhandledRejection", (reason) => {
|
|
4094
|
+
const msg = reason instanceof Error ? reason.message : String(reason);
|
|
4095
|
+
const isAcpRecoverable = reason instanceof Error && reason.name === "AcpExitError" || msg.includes("kiro-cli exited") || msg.includes("-32603") || msg.includes("AcpExit");
|
|
4096
|
+
if (isAcpRecoverable) {
|
|
4097
|
+
console.error(`[WARN] Suppressed ACP rejection (transport will reinit): ${msg}`);
|
|
4098
|
+
return;
|
|
4099
|
+
}
|
|
4075
4100
|
console.error(`[FATAL] Unhandled rejection: ${reason instanceof Error ? reason.stack ?? reason.message : reason}`);
|
|
4076
4101
|
process.exit(1);
|
|
4077
4102
|
});
|