@todoforai/cli 0.1.67 → 0.1.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/todoforai-cli.js +173 -621
  2. package/package.json +1 -1
@@ -44993,6 +44993,7 @@ var tool_catalog_default = {
44993
44993
  label: "GitLab",
44994
44994
  summary: "Work with your GitLab repos, merge requests and pipelines.",
44995
44995
  statusCmd: "glab auth status 2>&1 | grep -o 'Logged in to [^ ]* [a-z]* [^ ]*' | paste -sd ' ' - | grep -m1 .",
44996
+ logoutCmd: "glab auth logout --hostname gitlab.com 2>&1 </dev/null",
44996
44997
  loginCmd: "glab auth login --device",
44997
44998
  credentialPaths: ["~/.config/glab-cli/config.yml"],
44998
44999
  description: "GitLab equivalent of `gh`.",
@@ -45154,6 +45155,7 @@ var tool_catalog_default = {
45154
45155
  credentialPaths: ["~/.config/shopify-cli-kit-nodejs/config.json"],
45155
45156
  versionCmd: "shopify version 2>/dev/null | tail -n 1",
45156
45157
  statusCmd: `python3 -c "import json,os,sys;p=os.path.expanduser('~/.config/shopify-cli-kit-nodejs/config.json');sys.exit(0 if json.load(open(p)).get('session') else 1)" 2>/dev/null && echo authenticated`,
45158
+ logoutCmd: "shopify auth logout",
45157
45159
  deviceCodePattern: "verification code: ([A-Z0-9-]+)",
45158
45160
  oauthUrlPattern: "(https://accounts\\.shopify\\.com/activate-with-code\\S*)",
45159
45161
  canStreamLogin: true,
@@ -45251,57 +45253,111 @@ var tool_catalog_default = {
45251
45253
  installer: "binary",
45252
45254
  preinstallCloud: true,
45253
45255
  binary: {
45254
- "linux-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.7/rclone-linux-amd64.tar.gz", archive: "tar.gz", extract: "rclone" },
45255
- "linux-aarch64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.7/rclone-linux-arm64.tar.gz", archive: "tar.gz", extract: "rclone" },
45256
- "darwin-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.7/rclone-darwin-amd64.tar.gz", archive: "tar.gz", extract: "rclone" },
45257
- "darwin-aarch64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.7/rclone-darwin-arm64.tar.gz", archive: "tar.gz", extract: "rclone" },
45258
- "windows-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.7/rclone-windows-amd64.zip", archive: "zip", extract: "rclone.exe" }
45256
+ "linux-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-linux-amd64.tar.gz", archive: "tar.gz", extract: "rclone" },
45257
+ "linux-aarch64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-linux-arm64.tar.gz", archive: "tar.gz", extract: "rclone" },
45258
+ "darwin-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-darwin-amd64.tar.gz", archive: "tar.gz", extract: "rclone" },
45259
+ "darwin-aarch64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-darwin-arm64.tar.gz", archive: "tar.gz", extract: "rclone" },
45260
+ "windows-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-windows-amd64.zip", archive: "zip", extract: "rclone.exe" }
45259
45261
  },
45262
+ internal: true,
45260
45263
  label: "Cloud Storage",
45261
- summary: "Move files between Google Drive, Dropbox, OneDrive, S3 and more.",
45262
- statusCmd: "rclone listremotes --long 2>/dev/null | tr -s ' ' | grep -v ' todoforai *$' | grep -m20 .",
45263
- loginCmd: "rclone config",
45264
- loginTerminalHint: "Connect a storage from its own tile (Google Drive, OneDrive, Dropbox…). For other backends run `rclone config` in a terminal on this host.",
45265
- oauthUrlPattern: "(https?://127\\.0\\.0\\.1:\\d+/auth\\?\\S+)",
45266
- oauthCallbackPort: 53682,
45264
+ summary: "The rclone program behind the Google Drive, OneDrive, Dropbox and S3 connectors.",
45267
45265
  credentialPaths: ["~/.config/rclone/rclone.conf"],
45268
- subProviders: {
45269
- gdrive: {
45270
- label: "Google Drive",
45271
- authType: "oauth",
45272
- connectCmd: "rclone config create {{REMOTE}} drive",
45273
- remoteName: "gdrive",
45274
- rcloneType: "drive",
45275
- userInfoCmd: `TOKEN=$(rclone config dump 2>/dev/null | python3 -c "import json,sys; print(json.loads(json.load(sys.stdin)['{{REMOTE}}']['token'])['access_token'])") && curl -sf 'https://www.googleapis.com/drive/v3/about?fields=user' -H "Authorization: Bearer $TOKEN" | python3 -c "import json,sys; print(json.load(sys.stdin)['user']['emailAddress'])" 2>/dev/null`
45276
- },
45277
- onedrive: {
45278
- label: "OneDrive",
45279
- authType: "oauth",
45280
- connectCmd: "rclone config create {{REMOTE}} onedrive",
45281
- remoteName: "onedrive",
45282
- rcloneType: "onedrive",
45283
- userInfoCmd: `TOKEN=$(rclone config dump 2>/dev/null | python3 -c "import json,sys; print(json.loads(json.load(sys.stdin)['{{REMOTE}}']['token'])['access_token'])") && curl -sf 'https://graph.microsoft.com/v1.0/me' -H "Authorization: Bearer $TOKEN" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('mail') or d.get('userPrincipalName',''))" 2>/dev/null`
45284
- },
45285
- dropbox: {
45286
- label: "Dropbox",
45287
- authType: "oauth",
45288
- connectCmd: "rclone config create {{REMOTE}} dropbox",
45289
- remoteName: "dropbox",
45290
- rcloneType: "dropbox",
45291
- userInfoCmd: `TOKEN=$(rclone config dump 2>/dev/null | python3 -c "import json,sys; print(json.loads(json.load(sys.stdin)['{{REMOTE}}']['token'])['access_token'])") && curl -sf -X POST 'https://api.dropboxapi.com/2/users/get_current_account' -H "Authorization: Bearer $TOKEN" | python3 -c "import json,sys; print(json.load(sys.stdin)['email'])" 2>/dev/null`
45292
- },
45293
- s3: {
45294
- label: "Amazon S3",
45295
- authType: "credentials",
45296
- connectCmd: "rclone config create {{REMOTE}} s3",
45297
- remoteName: "s3",
45298
- rcloneType: "s3"
45299
- }
45300
- },
45301
45266
  versionCmd: "rclone version 2>/dev/null | sed -n 1p",
45302
45267
  preinstallJarvis: true,
45303
45268
  description: "Access Google Drive, OneDrive, Dropbox, S3, and 40+ cloud providers. List, copy, sync, move, and mount files; use `rclone config create <name> <provider>` to connect."
45304
45269
  },
45270
+ gdrive: {
45271
+ category: "cloud",
45272
+ pkg: "rclone",
45273
+ installer: "binary",
45274
+ binName: "rclone",
45275
+ binary: {
45276
+ "linux-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-linux-amd64.tar.gz", archive: "tar.gz", extract: "rclone" },
45277
+ "linux-aarch64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-linux-arm64.tar.gz", archive: "tar.gz", extract: "rclone" },
45278
+ "darwin-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-darwin-amd64.tar.gz", archive: "tar.gz", extract: "rclone" },
45279
+ "darwin-aarch64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-darwin-arm64.tar.gz", archive: "tar.gz", extract: "rclone" },
45280
+ "windows-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-windows-amd64.zip", archive: "zip", extract: "rclone.exe" }
45281
+ },
45282
+ label: "Google Drive",
45283
+ summary: "Browse, read and write files in your Google Drive.",
45284
+ rcloneType: "drive",
45285
+ statusCmd: `rclone listremotes --long 2>/dev/null | while read -r n t d; do [ "$t" = drive ] && { case "$d" in ""|*[[:space:]]*) a=\${n%:};; *) a=$d;; esac; echo "$a"; }; done | paste -sd ' ' - | grep -m1 .`,
45286
+ loginCmd: "rclone config",
45287
+ oauthBroker: true,
45288
+ logoutCmd: 'x={{ACCOUNT}}; rclone listremotes --long 2>/dev/null | while read -r n t d; do [ "$t" = drive ] || continue; case "$d" in ""|*[[:space:]]*) a=${n%:};; *) a=$d;; esac; [ -z "$x" ] || [ "$a" = "$x" ] && rclone config delete "${n%:}"; done; true',
45289
+ credentialPaths: ["~/.config/rclone/rclone.conf"],
45290
+ versionCmd: "rclone version 2>/dev/null | sed -n 1p",
45291
+ description: "Google Drive connector. Uses the rclone CLI: `rclone listremotes --long` lists every connected storage as `name: type account`; `rclone lsf <remote>:<path>`, `rclone copy|sync|move <src> <dst>`, `rclone cat`, `rclone mkdir`, `rclone deletefile` work on any of them (Google Drive = type drive, OneDrive = onedrive, Dropbox = dropbox, S3 = s3). Never run `rclone config` interactively; connect new accounts with `todo.connect('<key>')`."
45292
+ },
45293
+ onedrive: {
45294
+ category: "cloud",
45295
+ pkg: "rclone",
45296
+ installer: "binary",
45297
+ binName: "rclone",
45298
+ binary: {
45299
+ "linux-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-linux-amd64.tar.gz", archive: "tar.gz", extract: "rclone" },
45300
+ "linux-aarch64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-linux-arm64.tar.gz", archive: "tar.gz", extract: "rclone" },
45301
+ "darwin-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-darwin-amd64.tar.gz", archive: "tar.gz", extract: "rclone" },
45302
+ "darwin-aarch64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-darwin-arm64.tar.gz", archive: "tar.gz", extract: "rclone" },
45303
+ "windows-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-windows-amd64.zip", archive: "zip", extract: "rclone.exe" }
45304
+ },
45305
+ label: "OneDrive",
45306
+ summary: "Browse, read and write files in your OneDrive.",
45307
+ rcloneType: "onedrive",
45308
+ statusCmd: `rclone listremotes --long 2>/dev/null | while read -r n t d; do [ "$t" = onedrive ] && { case "$d" in ""|*[[:space:]]*) a=\${n%:};; *) a=$d;; esac; echo "$a"; }; done | paste -sd ' ' - | grep -m1 .`,
45309
+ loginCmd: "rclone config",
45310
+ oauthBroker: true,
45311
+ logoutCmd: 'x={{ACCOUNT}}; rclone listremotes --long 2>/dev/null | while read -r n t d; do [ "$t" = onedrive ] || continue; case "$d" in ""|*[[:space:]]*) a=${n%:};; *) a=$d;; esac; [ -z "$x" ] || [ "$a" = "$x" ] && rclone config delete "${n%:}"; done; true',
45312
+ credentialPaths: ["~/.config/rclone/rclone.conf"],
45313
+ versionCmd: "rclone version 2>/dev/null | sed -n 1p",
45314
+ description: "OneDrive connector. Uses the rclone CLI: `rclone listremotes --long` lists every connected storage as `name: type account`; `rclone lsf <remote>:<path>`, `rclone copy|sync|move <src> <dst>`, `rclone cat`, `rclone mkdir`, `rclone deletefile` work on any of them (Google Drive = type drive, OneDrive = onedrive, Dropbox = dropbox, S3 = s3). Never run `rclone config` interactively; connect new accounts with `todo.connect('<key>')`."
45315
+ },
45316
+ dropbox: {
45317
+ category: "cloud",
45318
+ pkg: "rclone",
45319
+ installer: "binary",
45320
+ binName: "rclone",
45321
+ binary: {
45322
+ "linux-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-linux-amd64.tar.gz", archive: "tar.gz", extract: "rclone" },
45323
+ "linux-aarch64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-linux-arm64.tar.gz", archive: "tar.gz", extract: "rclone" },
45324
+ "darwin-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-darwin-amd64.tar.gz", archive: "tar.gz", extract: "rclone" },
45325
+ "darwin-aarch64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-darwin-arm64.tar.gz", archive: "tar.gz", extract: "rclone" },
45326
+ "windows-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-windows-amd64.zip", archive: "zip", extract: "rclone.exe" }
45327
+ },
45328
+ label: "Dropbox",
45329
+ summary: "Browse, read and write files in your Dropbox.",
45330
+ rcloneType: "dropbox",
45331
+ statusCmd: `rclone listremotes --long 2>/dev/null | while read -r n t d; do [ "$t" = dropbox ] && { case "$d" in ""|*[[:space:]]*) a=\${n%:};; *) a=$d;; esac; echo "$a"; }; done | paste -sd ' ' - | grep -m1 .`,
45332
+ loginCmd: "rclone config",
45333
+ oauthBroker: true,
45334
+ logoutCmd: 'x={{ACCOUNT}}; rclone listremotes --long 2>/dev/null | while read -r n t d; do [ "$t" = dropbox ] || continue; case "$d" in ""|*[[:space:]]*) a=${n%:};; *) a=$d;; esac; [ -z "$x" ] || [ "$a" = "$x" ] && rclone config delete "${n%:}"; done; true',
45335
+ credentialPaths: ["~/.config/rclone/rclone.conf"],
45336
+ versionCmd: "rclone version 2>/dev/null | sed -n 1p",
45337
+ description: "Dropbox connector. Uses the rclone CLI: `rclone listremotes --long` lists every connected storage as `name: type account`; `rclone lsf <remote>:<path>`, `rclone copy|sync|move <src> <dst>`, `rclone cat`, `rclone mkdir`, `rclone deletefile` work on any of them (Google Drive = type drive, OneDrive = onedrive, Dropbox = dropbox, S3 = s3). Never run `rclone config` interactively; connect new accounts with `todo.connect('<key>')`."
45338
+ },
45339
+ s3: {
45340
+ category: "cloud",
45341
+ pkg: "rclone",
45342
+ installer: "binary",
45343
+ binName: "rclone",
45344
+ binary: {
45345
+ "linux-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-linux-amd64.tar.gz", archive: "tar.gz", extract: "rclone" },
45346
+ "linux-aarch64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-linux-arm64.tar.gz", archive: "tar.gz", extract: "rclone" },
45347
+ "darwin-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-darwin-amd64.tar.gz", archive: "tar.gz", extract: "rclone" },
45348
+ "darwin-aarch64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-darwin-arm64.tar.gz", archive: "tar.gz", extract: "rclone" },
45349
+ "windows-x86_64": { url: "https://github.com/todoforai/rclone-backend/releases/download/v0.1.8/rclone-windows-amd64.zip", archive: "zip", extract: "rclone.exe" }
45350
+ },
45351
+ label: "Amazon S3",
45352
+ summary: "Browse, read and write files in your Amazon S3 buckets.",
45353
+ rcloneType: "s3",
45354
+ statusCmd: `rclone listremotes --long 2>/dev/null | while read -r n t d; do [ "$t" = s3 ] && { case "$d" in ""|*[[:space:]]*) a=\${n%:};; *) a=$d;; esac; echo "$a"; }; done | paste -sd ' ' - | grep -m1 .`,
45355
+ loginCmd: `k=<access_key_id> s=<secret_access_key> r=<region>; RCLONE_S3_PROVIDER=AWS RCLONE_S3_ENV_AUTH=false RCLONE_S3_ACCESS_KEY_ID="$k" RCLONE_S3_SECRET_ACCESS_KEY="$s" RCLONE_S3_REGION="$r" rclone lsd :s3: --config /dev/null --ask-password=false --contimeout 10s --timeout 15s --retries 1 --low-level-retries 1 >/dev/null 2>&1 || { echo 'S3 access check failed: check the keys, the region and the s3:ListAllMyBuckets permission.'; exit 2; }; rclone config create --non-interactive --ask-password=false "s3_$(date +%s)" s3 provider AWS env_auth false access_key_id "$k" secret_access_key "$s" region "$r" >/dev/null && echo 'S3 connected.'`,
45356
+ logoutCmd: 'x={{ACCOUNT}}; rclone listremotes --long 2>/dev/null | while read -r n t d; do [ "$t" = s3 ] || continue; case "$d" in ""|*[[:space:]]*) a=${n%:};; *) a=$d;; esac; [ -z "$x" ] || [ "$a" = "$x" ] && rclone config delete "${n%:}"; done; true',
45357
+ credentialPaths: ["~/.config/rclone/rclone.conf"],
45358
+ versionCmd: "rclone version 2>/dev/null | sed -n 1p",
45359
+ description: "Amazon S3 connector. Uses the rclone CLI: `rclone listremotes --long` lists every connected storage as `name: type account`; `rclone lsf <remote>:<path>`, `rclone copy|sync|move <src> <dst>`, `rclone cat`, `rclone mkdir`, `rclone deletefile` work on any of them (Google Drive = type drive, OneDrive = onedrive, Dropbox = dropbox, S3 = s3). Never run `rclone config` interactively; connect new accounts with `todo.connect('<key>')`."
45360
+ },
45305
45361
  aws: {
45306
45362
  preinstallCloud: true,
45307
45363
  cloudInstallCmd: "curl -fsSL https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o /tmp/awscli.zip && unzip -qo /tmp/awscli.zip -d /tmp && /tmp/aws/install --update && rm -rf /tmp/aws /tmp/awscli.zip",
@@ -45347,6 +45403,7 @@ var tool_catalog_default = {
45347
45403
  summary: "Manage your Microsoft Azure resources.",
45348
45404
  binName: "az",
45349
45405
  statusCmd: "az account show --query user.name -o tsv 2>/dev/null | tr -d '\\r' | grep -m1 .",
45406
+ logoutCmd: "az logout 2>&1; az account clear 2>&1",
45350
45407
  loginCmd: "az login --use-device-code",
45351
45408
  oauthUrlPattern: "(https://login\\.microsoft\\.com/device\\S*)",
45352
45409
  deviceCodePattern: "enter the code ([A-Z0-9]+)",
@@ -45432,7 +45489,7 @@ var tool_catalog_default = {
45432
45489
  preinstallCloud: true,
45433
45490
  label: "Browser",
45434
45491
  summary: "Browse websites automatically: click, type, read and screenshot.",
45435
- description: "Browser automation over CDP (`open`/`snapshot`/`click`/`type`/`fill`/`read`/`screenshot`/`eval`). `connect '<url>'` to a listed live browser (prefer the user's real Chrome), verify with `snapshot`; if empty, `close` (own session only) and reconnect once. NEVER `close --all`. Shared browser: `tab new` for your own tab, `tab <id>` before each command. No URL listed: cloud → browser-manager-cli; PC with display → Chrome `--remote-debugging-port=9222`, attach `--cdp 9222`. Never `sleep`: `open` returns after load, but `click`/`fill` fail at once if the element isn't there yet — `wait '<sel>'`, `wait --text 'Done'`, `wait --url '**/dash'`, `wait --load networkidle` or `wait '#spinner' --state hidden` first.",
45492
+ description: "Browser automation over CDP (`open`/`snapshot`/`click`/`type`/`fill`/`read`/`screenshot`/`eval`). `connect '<url>'` to a listed live browser (prefer the user's real Chrome), verify with `snapshot`; if empty, `close` (own session only) and reconnect once. NEVER `close --all`. Shared browser: `tab new` for your own tab, `tab <id>` before each command. No URL listed: cloud → browser-manager-cli; PC with display → Chrome `--remote-debugging-port=9222`, attach `--cdp 9222`. Never `sleep`: `open` returns after load, but `click`/`fill` fail at once if the element isn't there yet — `wait '<sel>'`, `wait --text 'Done'`, `wait --url '**/dash'`, `wait --load networkidle` or `wait '#spinner' --state hidden` first. Extension browsers (WEB_EXTENSION) only: try sign-in with credentials from `tfa-vault`; request human help only for a step you cannot complete yourself (MFA/CAPTCHA/consent). Use Node/Bun WebSocket on the listed CDP URL; `Target.getTargets` or `device_list` gives `tab-N`, whose N is the numeric tabId. On the SAME socket send `{id: 1, method: 'TodoforAI.requestHumanHelp', params: {tabId: N, message: 'what to do'}}` (message 1–500 chars). This focuses and pauses the tab, sets its yellow `?` badge, and shows needs-you in the extension popup. Tell the user to click Resume control and reply here, then end your turn; Resume does not wake the agent. Afterwards reconnect and snapshot fresh. `TodoforAI.humanHelpStatus` with `{tabId}` remains available while paused. If bootstrap fails on a restricted target, direct CDP `Target.createTarget` with an ordinary URL opens your tab on the SAME socket; pass numeric N from returned `tab-N` as `tabId`.",
45436
45493
  versionCmd: "agent-browser --version 2>/dev/null | sed -n 1p",
45437
45494
  preinstallJarvis: true
45438
45495
  },
@@ -45574,6 +45631,17 @@ var tool_catalog_default = {
45574
45631
  preinstallCloud: true,
45575
45632
  preinstallJarvis: true
45576
45633
  },
45634
+ "tfa-find": {
45635
+ internal: true,
45636
+ category: "todoforai",
45637
+ pkg: "@todoforai/tfa-find",
45638
+ installer: "npm",
45639
+ label: "File Search",
45640
+ summary: "Find documents, photos and more by describing what you need.",
45641
+ description: "Search files in folders you choose on your machine. Register folders, build a search index, then find relevant documents, images, audio and video with natural-language queries. CLI: tfa-find.",
45642
+ versionCmd: "tfa-find --version 2>/dev/null | sed -n 1p",
45643
+ installCmd: "npm install -g @todoforai/tfa-find"
45644
+ },
45577
45645
  "tfa-memory": {
45578
45646
  category: "todoforai",
45579
45647
  pkg: "@todoforai/tfa-memory",
@@ -45961,6 +46029,7 @@ var tool_catalog_default = {
45961
46029
  loginCmd: "mailchimp-api auth --api-key <api_key>",
45962
46030
  oauthBroker: true,
45963
46031
  statusCmd: `mailchimp-api whoami 2>/dev/null | sed -n 's/.*"account_name"[[:space:]]*:[[:space:]]*"\\([^"]*\\)".*/\\1/p' | grep -m1 .`,
46032
+ logoutCmd: "rm -f ~/.config/mailchimp-api/credentials.json",
45964
46033
  credentialPaths: [
45965
46034
  "~/.config/mailchimp-api/credentials.json"
45966
46035
  ],
@@ -45978,6 +46047,7 @@ var tool_catalog_default = {
45978
46047
  statusCmd: `facebook-pages-api whoami 2>/dev/null | sed -n 's/.*"name"[[:space:]]*:[[:space:]]*"\\([^"]*\\)".*/\\1/p' | grep -m10 .`,
45979
46048
  loginCmd: "facebook-pages-api auth --page-id <id> --page-token <token>",
45980
46049
  oauthBroker: true,
46050
+ logoutCmd: "rm -f ~/.config/facebook-pages-api/credentials.json",
45981
46051
  credentialPaths: ["~/.config/facebook-pages-api/credentials.json"],
45982
46052
  description: "Facebook Pages CLI (Meta Graph API). `auth --page-id <id> --page-token <token>` (or env FB_PAGE_ID/FB_PAGE_TOKEN). `feed`, `comments`, `insights`, `conversations`, `media`, and `request <GET|POST|DELETE> <path> [--data <json>]` = any Graph edge with the page token attached (use instead of curl). Writes are live: `feed create --published false` for tests; `comments reply` posts publicly — get human approval. Follower totals: `whoami --fields followers_count,fan_count` (many classic insights metrics are retired). Instagram (linked professional account, same page token): `ig whoami|media|get|stories|tags|limit`, `ig publish --image_url U | --video_url U [--media_type STORIES] | --carousel U1,U2 [--caption …]` (public URLs; container → wait → publish; `--create-only` = dry run; 100 posts/24h), `ig comments list|replies|create|reply|hide|delete|toggle`, `ig insights [media_id]` (needs instagram_manage_insights). `--help` for subcommands.",
45983
46053
  versionCmd: "facebook-pages-api --version 2>/dev/null | sed -n 1p"
@@ -46019,6 +46089,7 @@ var tool_catalog_default = {
46019
46089
  voiceChannel: "Outlook",
46020
46090
  summary: "Read and write your Outlook mail.",
46021
46091
  statusCmd: `outlook-api whoami 2>/dev/null | sed -n 's/.*"userPrincipalName"[[:space:]]*:[[:space:]]*"\\([^"]*\\)".*/\\1/p' | grep -m10 .`,
46092
+ logoutCmd: "outlook-api logout",
46022
46093
  loginCmd: "outlook-api auth",
46023
46094
  credentialPaths: ["~/.config/outlook-api/config.json"],
46024
46095
  description: "Outlook/Hotmail/M365 mail over Microsoft Graph (on-prem Exchange → ews-api). `auth` = device-code flow; `--tenant consumers` (default, personal) | `organizations`. list/search/read/attachments are read-only; `draft`/`reply` stay in Drafts unless --send; `send <draftId>`. `get <path>` = raw Graph GET. JSON out.",
@@ -46051,6 +46122,7 @@ var tool_catalog_default = {
46051
46122
  label: "Microsoft 365",
46052
46123
  summary: "Work with Microsoft 365 mail, Teams, SharePoint and users.",
46053
46124
  statusCmd: `m365 status --output text 2>/dev/null | tr -d '"' | grep -vi 'logged out' | grep -m1 .`,
46125
+ logoutCmd: "m365 logout",
46054
46126
  loginCmd: "m365 login --authType deviceCode --appId 14d82eec-204b-4c2f-b7e8-296a70dab67e",
46055
46127
  deviceCodePattern: "enter the code ([A-Z0-9]{8,}) to authenticate",
46056
46128
  oauthUrlPattern: "open the page (https://\\S+) and enter",
@@ -50272,7 +50344,7 @@ var package_default = {
50272
50344
  type: "git",
50273
50345
  url: "git+https://github.com/todoforai/cli.git"
50274
50346
  },
50275
- version: "0.1.67",
50347
+ version: "0.1.69",
50276
50348
  type: "module",
50277
50349
  bin: {
50278
50350
  "todoforai-cli": "bin/todoforai-cli.js",
@@ -53279,6 +53351,8 @@ Fields map directly to agent settings; values are parsed as JSON when possible
53279
53351
  temperature number, e.g. 0.7
53280
53352
  thinkingLevel low | medium | high | xhigh | max
53281
53353
  refusalFallbackModel model to switch to if 'model' refuses (empty = off)
53354
+ autoCompaction true | false — automatic context compaction (default true)
53355
+ contextLimit tokens compaction is measured against (0 = auto from model, max 200K)
53282
53356
  name agent display name
53283
53357
 
53284
53358
  Examples:
@@ -55779,17 +55853,7 @@ var AGENT_METHODS = {
55779
55853
  session_fork: "session/fork",
55780
55854
  session_resume: "session/resume",
55781
55855
  session_close: "session/close",
55782
- logout: "logout",
55783
- nes_start: "nes/start",
55784
- nes_suggest: "nes/suggest",
55785
- nes_accept: "nes/accept",
55786
- nes_reject: "nes/reject",
55787
- nes_close: "nes/close",
55788
- document_did_open: "document/didOpen",
55789
- document_did_change: "document/didChange",
55790
- document_did_close: "document/didClose",
55791
- document_did_save: "document/didSave",
55792
- document_did_focus: "document/didFocus"
55856
+ logout: "logout"
55793
55857
  };
55794
55858
  var CLIENT_METHODS = {
55795
55859
  session_request_permission: "session/request_permission",
@@ -75866,204 +75930,86 @@ var zSessionAdditionalDirectoriesCapabilities = object({
75866
75930
  return;
75867
75931
  })
75868
75932
  });
75869
- var zSessionForkCapabilities = object({
75870
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
75871
- return;
75872
- })
75873
- });
75874
- var zSessionResumeCapabilities = object({
75933
+ var zSessionSystemPromptOverrideCapabilities = object({
75875
75934
  _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
75876
75935
  return;
75877
75936
  })
75878
75937
  });
75879
- var zSessionCloseCapabilities = object({
75880
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
75881
- return;
75882
- })
75883
- });
75884
- var zSessionCapabilities = object({
75885
- list: defaultOnError(zSessionListCapabilities.nullish(), () => {
75886
- return;
75887
- }),
75888
- delete: defaultOnError(zSessionDeleteCapabilities.nullish(), () => {
75889
- return;
75890
- }),
75891
- additionalDirectories: defaultOnError(zSessionAdditionalDirectoriesCapabilities.nullish(), () => {
75892
- return;
75893
- }),
75894
- fork: defaultOnError(zSessionForkCapabilities.nullish(), () => {
75895
- return;
75896
- }),
75897
- resume: defaultOnError(zSessionResumeCapabilities.nullish(), () => {
75898
- return;
75899
- }),
75900
- close: defaultOnError(zSessionCloseCapabilities.nullish(), () => {
75938
+ var zSessionSystemPromptModeCapabilities = object({
75939
+ override: defaultOnError(zSessionSystemPromptOverrideCapabilities.nullish(), () => {
75901
75940
  return;
75902
75941
  }),
75903
75942
  _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
75904
75943
  return;
75905
75944
  })
75906
75945
  });
75907
- var zLogoutCapabilities = object({
75908
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
75909
- return;
75910
- })
75911
- });
75912
- var zAgentAuthCapabilities = object({
75913
- logout: defaultOnError(zLogoutCapabilities.nullish(), () => {
75946
+ var zSessionSystemPromptCapabilities = object({
75947
+ mode: defaultOnError(zSessionSystemPromptModeCapabilities.nullish(), () => {
75914
75948
  return;
75915
75949
  }),
75916
75950
  _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
75917
75951
  return;
75918
75952
  })
75919
75953
  });
75920
- var zProvidersCapabilities = object({
75921
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
75922
- return;
75923
- })
75924
- });
75925
- var zNesDocumentDidOpenCapabilities = object({
75926
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
75927
- return;
75928
- })
75929
- });
75930
- var zTextDocumentSyncKind = union([
75931
- literal("full"),
75932
- literal("incremental")
75933
- ]);
75934
- var zNesDocumentDidChangeCapabilities = object({
75935
- syncKind: zTextDocumentSyncKind,
75936
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
75937
- return;
75938
- })
75939
- });
75940
- var zNesDocumentDidCloseCapabilities = object({
75954
+ var zSessionForkCapabilities = object({
75941
75955
  _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
75942
75956
  return;
75943
75957
  })
75944
75958
  });
75945
- var zNesDocumentDidSaveCapabilities = object({
75959
+ var zSessionResumeCapabilities = object({
75946
75960
  _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
75947
75961
  return;
75948
75962
  })
75949
75963
  });
75950
- var zNesDocumentDidFocusCapabilities = object({
75964
+ var zSessionCloseCapabilities = object({
75951
75965
  _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
75952
75966
  return;
75953
75967
  })
75954
75968
  });
75955
- var zNesDocumentEventCapabilities = object({
75956
- didOpen: defaultOnError(zNesDocumentDidOpenCapabilities.nullish(), () => {
75957
- return;
75958
- }),
75959
- didChange: defaultOnError(zNesDocumentDidChangeCapabilities.nullish(), () => {
75969
+ var zSessionCapabilities = object({
75970
+ list: defaultOnError(zSessionListCapabilities.nullish(), () => {
75960
75971
  return;
75961
75972
  }),
75962
- didClose: defaultOnError(zNesDocumentDidCloseCapabilities.nullish(), () => {
75973
+ delete: defaultOnError(zSessionDeleteCapabilities.nullish(), () => {
75963
75974
  return;
75964
75975
  }),
75965
- didSave: defaultOnError(zNesDocumentDidSaveCapabilities.nullish(), () => {
75976
+ additionalDirectories: defaultOnError(zSessionAdditionalDirectoriesCapabilities.nullish(), () => {
75966
75977
  return;
75967
75978
  }),
75968
- didFocus: defaultOnError(zNesDocumentDidFocusCapabilities.nullish(), () => {
75979
+ systemPrompt: defaultOnError(zSessionSystemPromptCapabilities.nullish(), () => {
75969
75980
  return;
75970
75981
  }),
75971
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
75972
- return;
75973
- })
75974
- });
75975
- var zNesEventCapabilities = object({
75976
- document: defaultOnError(zNesDocumentEventCapabilities.nullish(), () => {
75977
- return;
75978
- }),
75979
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
75980
- return;
75981
- })
75982
- });
75983
- var zNesRecentFilesCapabilities = object({
75984
- maxCount: defaultOnError(int().gte(0).max(4294967295, {
75985
- error: "Invalid value: Expected uint32 to be <= 4294967295"
75986
- }).nullish(), () => {
75982
+ fork: defaultOnError(zSessionForkCapabilities.nullish(), () => {
75987
75983
  return;
75988
75984
  }),
75989
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
75990
- return;
75991
- })
75992
- });
75993
- var zNesRelatedSnippetsCapabilities = object({
75994
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
75995
- return;
75996
- })
75997
- });
75998
- var zNesEditHistoryCapabilities = object({
75999
- maxCount: defaultOnError(int().gte(0).max(4294967295, {
76000
- error: "Invalid value: Expected uint32 to be <= 4294967295"
76001
- }).nullish(), () => {
75985
+ resume: defaultOnError(zSessionResumeCapabilities.nullish(), () => {
76002
75986
  return;
76003
75987
  }),
76004
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
76005
- return;
76006
- })
76007
- });
76008
- var zNesUserActionsCapabilities = object({
76009
- maxCount: defaultOnError(int().gte(0).max(4294967295, {
76010
- error: "Invalid value: Expected uint32 to be <= 4294967295"
76011
- }).nullish(), () => {
75988
+ close: defaultOnError(zSessionCloseCapabilities.nullish(), () => {
76012
75989
  return;
76013
75990
  }),
76014
75991
  _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
76015
75992
  return;
76016
75993
  })
76017
75994
  });
76018
- var zNesOpenFilesCapabilities = object({
76019
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
76020
- return;
76021
- })
76022
- });
76023
- var zNesDiagnosticsCapabilities = object({
75995
+ var zLogoutCapabilities = object({
76024
75996
  _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
76025
75997
  return;
76026
75998
  })
76027
75999
  });
76028
- var zNesContextCapabilities = object({
76029
- recentFiles: defaultOnError(zNesRecentFilesCapabilities.nullish(), () => {
76030
- return;
76031
- }),
76032
- relatedSnippets: defaultOnError(zNesRelatedSnippetsCapabilities.nullish(), () => {
76033
- return;
76034
- }),
76035
- editHistory: defaultOnError(zNesEditHistoryCapabilities.nullish(), () => {
76036
- return;
76037
- }),
76038
- userActions: defaultOnError(zNesUserActionsCapabilities.nullish(), () => {
76039
- return;
76040
- }),
76041
- openFiles: defaultOnError(zNesOpenFilesCapabilities.nullish(), () => {
76042
- return;
76043
- }),
76044
- diagnostics: defaultOnError(zNesDiagnosticsCapabilities.nullish(), () => {
76000
+ var zAgentAuthCapabilities = object({
76001
+ logout: defaultOnError(zLogoutCapabilities.nullish(), () => {
76045
76002
  return;
76046
76003
  }),
76047
76004
  _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
76048
76005
  return;
76049
76006
  })
76050
76007
  });
76051
- var zNesCapabilities = object({
76052
- events: defaultOnError(zNesEventCapabilities.nullish(), () => {
76053
- return;
76054
- }),
76055
- context: defaultOnError(zNesContextCapabilities.nullish(), () => {
76056
- return;
76057
- }),
76008
+ var zProvidersCapabilities = object({
76058
76009
  _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
76059
76010
  return;
76060
76011
  })
76061
76012
  });
76062
- var zPositionEncodingKind = union([
76063
- literal("utf-16"),
76064
- literal("utf-32"),
76065
- literal("utf-8")
76066
- ]);
76067
76013
  var zAgentCapabilities = object({
76068
76014
  loadSession: defaultOnError(boolean2().optional().default(false), () => false),
76069
76015
  promptCapabilities: defaultOnError(zPromptCapabilities.optional().default({
@@ -76089,12 +76035,6 @@ var zAgentCapabilities = object({
76089
76035
  providers: defaultOnError(zProvidersCapabilities.nullish(), () => {
76090
76036
  return;
76091
76037
  }),
76092
- nes: defaultOnError(zNesCapabilities.nullish(), () => {
76093
- return;
76094
- }),
76095
- positionEncoding: defaultOnError(zPositionEncodingKind.nullish(), () => {
76096
- return;
76097
- }),
76098
76038
  _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
76099
76039
  return;
76100
76040
  })
@@ -76428,101 +76368,6 @@ var zPromptResponse = object({
76428
76368
  return;
76429
76369
  })
76430
76370
  });
76431
- var zStartNesResponse = object({
76432
- sessionId: zSessionId,
76433
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
76434
- return;
76435
- })
76436
- });
76437
- var zNesSuggestionId = string2();
76438
- var zPosition = object({
76439
- line: int().gte(0).max(4294967295, {
76440
- error: "Invalid value: Expected uint32 to be <= 4294967295"
76441
- }),
76442
- character: int().gte(0).max(4294967295, {
76443
- error: "Invalid value: Expected uint32 to be <= 4294967295"
76444
- }),
76445
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
76446
- return;
76447
- })
76448
- });
76449
- var zRange = object({
76450
- start: zPosition,
76451
- end: zPosition,
76452
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
76453
- return;
76454
- })
76455
- });
76456
- var zNesTextEdit = object({
76457
- range: zRange,
76458
- newText: string2(),
76459
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
76460
- return;
76461
- })
76462
- });
76463
- var zNesEditSuggestion = object({
76464
- id: zNesSuggestionId,
76465
- uri: string2(),
76466
- edits: array(zNesTextEdit),
76467
- cursorPosition: defaultOnError(zPosition.nullish(), () => {
76468
- return;
76469
- }),
76470
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
76471
- return;
76472
- })
76473
- });
76474
- var zNesJumpSuggestion = object({
76475
- id: zNesSuggestionId,
76476
- uri: string2(),
76477
- position: zPosition,
76478
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
76479
- return;
76480
- })
76481
- });
76482
- var zNesRenameSuggestion = object({
76483
- id: zNesSuggestionId,
76484
- uri: string2(),
76485
- position: zPosition,
76486
- newName: string2(),
76487
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
76488
- return;
76489
- })
76490
- });
76491
- var zNesSearchAndReplaceSuggestion = object({
76492
- id: zNesSuggestionId,
76493
- uri: string2(),
76494
- search: string2(),
76495
- replace: string2(),
76496
- isRegex: boolean2().nullish(),
76497
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
76498
- return;
76499
- })
76500
- });
76501
- var zNesSuggestion = union([
76502
- zNesEditSuggestion.and(object({
76503
- kind: literal("edit")
76504
- })),
76505
- zNesJumpSuggestion.and(object({
76506
- kind: literal("jump")
76507
- })),
76508
- zNesRenameSuggestion.and(object({
76509
- kind: literal("rename")
76510
- })),
76511
- zNesSearchAndReplaceSuggestion.and(object({
76512
- kind: literal("searchAndReplace")
76513
- }))
76514
- ]);
76515
- var zSuggestNesResponse = object({
76516
- suggestions: array(zNesSuggestion),
76517
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
76518
- return;
76519
- })
76520
- });
76521
- var zCloseNesResponse = object({
76522
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
76523
- return;
76524
- })
76525
- });
76526
76371
  var zExtResponse = unknown();
76527
76372
  var zErrorCode = union([
76528
76373
  literal(-32700),
@@ -76566,9 +76411,6 @@ var zAgentResponse = union([
76566
76411
  zSetSessionModeResponse,
76567
76412
  zSetSessionConfigOptionResponse,
76568
76413
  zPromptResponse,
76569
- zStartNesResponse,
76570
- zSuggestNesResponse,
76571
- zCloseNesResponse,
76572
76414
  zExtResponse
76573
76415
  ])
76574
76416
  }),
@@ -77087,35 +76929,6 @@ var zElicitationCapabilities = object({
77087
76929
  return;
77088
76930
  })
77089
76931
  });
77090
- var zNesJumpCapabilities = object({
77091
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77092
- return;
77093
- })
77094
- });
77095
- var zNesRenameCapabilities = object({
77096
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77097
- return;
77098
- })
77099
- });
77100
- var zNesSearchAndReplaceCapabilities = object({
77101
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77102
- return;
77103
- })
77104
- });
77105
- var zClientNesCapabilities = object({
77106
- jump: defaultOnError(zNesJumpCapabilities.nullish(), () => {
77107
- return;
77108
- }),
77109
- rename: defaultOnError(zNesRenameCapabilities.nullish(), () => {
77110
- return;
77111
- }),
77112
- searchAndReplace: defaultOnError(zNesSearchAndReplaceCapabilities.nullish(), () => {
77113
- return;
77114
- }),
77115
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77116
- return;
77117
- })
77118
- });
77119
76932
  var zClientCapabilities = object({
77120
76933
  fs: defaultOnError(zFileSystemCapabilities.optional().default({ readTextFile: false, writeTextFile: false }), () => ({ readTextFile: false, writeTextFile: false })),
77121
76934
  terminal: defaultOnError(boolean2().optional().default(false), () => false),
@@ -77132,10 +76945,6 @@ var zClientCapabilities = object({
77132
76945
  elicitation: defaultOnError(zElicitationCapabilities.nullish(), () => {
77133
76946
  return;
77134
76947
  }),
77135
- nes: defaultOnError(zClientNesCapabilities.nullish(), () => {
77136
- return;
77137
- }),
77138
- positionEncodings: defaultOnError(vecSkipError(zPositionEncodingKind).optional(), () => []),
77139
76948
  _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77140
76949
  return;
77141
76950
  })
@@ -77240,10 +77049,23 @@ var zMcpServer = union([
77240
77049
  })),
77241
77050
  zMcpServerStdio
77242
77051
  ]);
77052
+ var zSystemPromptMode = union([
77053
+ literal("append"),
77054
+ literal("override"),
77055
+ string2()
77056
+ ]);
77057
+ var zSystemPrompt = object({
77058
+ mode: zSystemPromptMode,
77059
+ content: array(zContentBlock),
77060
+ _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77061
+ return;
77062
+ })
77063
+ });
77243
77064
  var zNewSessionRequest = object({
77244
77065
  cwd: string2(),
77245
77066
  additionalDirectories: array(string2()).optional(),
77246
77067
  mcpServers: array(zMcpServer),
77068
+ systemPrompt: zSystemPrompt.nullish(),
77247
77069
  _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77248
77070
  return;
77249
77071
  })
@@ -77253,6 +77075,7 @@ var zLoadSessionRequest = object({
77253
77075
  cwd: string2(),
77254
77076
  additionalDirectories: array(string2()).optional(),
77255
77077
  sessionId: zSessionId,
77078
+ systemPrompt: zSystemPrompt.nullish(),
77256
77079
  _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77257
77080
  return;
77258
77081
  })
@@ -77275,6 +77098,7 @@ var zForkSessionRequest = object({
77275
77098
  cwd: string2(),
77276
77099
  additionalDirectories: array(string2()).optional(),
77277
77100
  mcpServers: array(zMcpServer).optional(),
77101
+ systemPrompt: zSystemPrompt.nullish(),
77278
77102
  _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77279
77103
  return;
77280
77104
  })
@@ -77284,6 +77108,7 @@ var zResumeSessionRequest = object({
77284
77108
  cwd: string2(),
77285
77109
  additionalDirectories: array(string2()).optional(),
77286
77110
  mcpServers: array(zMcpServer).optional(),
77111
+ systemPrompt: zSystemPrompt.nullish(),
77287
77112
  _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77288
77113
  return;
77289
77114
  })
@@ -77323,138 +77148,6 @@ var zPromptRequest = object({
77323
77148
  return;
77324
77149
  })
77325
77150
  });
77326
- var zWorkspaceFolder = object({
77327
- uri: string2(),
77328
- name: string2(),
77329
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77330
- return;
77331
- })
77332
- });
77333
- var zNesRepository = object({
77334
- name: string2(),
77335
- owner: string2(),
77336
- remoteUrl: string2(),
77337
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77338
- return;
77339
- })
77340
- });
77341
- var zStartNesRequest = object({
77342
- workspaceUri: defaultOnError(string2().nullish(), () => {
77343
- return;
77344
- }),
77345
- workspaceFolders: array(zWorkspaceFolder).nullish(),
77346
- repository: defaultOnError(zNesRepository.nullish(), () => {
77347
- return;
77348
- }),
77349
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77350
- return;
77351
- })
77352
- });
77353
- var zNesTriggerKind = union([
77354
- literal("automatic"),
77355
- literal("diagnostic"),
77356
- literal("manual")
77357
- ]);
77358
- var zNesRecentFile = object({
77359
- uri: string2(),
77360
- languageId: string2(),
77361
- text: string2(),
77362
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77363
- return;
77364
- })
77365
- });
77366
- var zNesExcerpt = object({
77367
- startLine: int().gte(0).max(4294967295, {
77368
- error: "Invalid value: Expected uint32 to be <= 4294967295"
77369
- }),
77370
- endLine: int().gte(0).max(4294967295, {
77371
- error: "Invalid value: Expected uint32 to be <= 4294967295"
77372
- }),
77373
- text: string2(),
77374
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77375
- return;
77376
- })
77377
- });
77378
- var zNesRelatedSnippet = object({
77379
- uri: string2(),
77380
- excerpts: array(zNesExcerpt),
77381
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77382
- return;
77383
- })
77384
- });
77385
- var zNesEditHistoryEntry = object({
77386
- uri: string2(),
77387
- diff: string2(),
77388
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77389
- return;
77390
- })
77391
- });
77392
- var zNesUserAction = object({
77393
- action: string2(),
77394
- uri: string2(),
77395
- position: zPosition,
77396
- timestampMs: number2(),
77397
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77398
- return;
77399
- })
77400
- });
77401
- var zNesOpenFile = object({
77402
- uri: string2(),
77403
- languageId: string2(),
77404
- visibleRange: defaultOnError(zRange.nullish(), () => {
77405
- return;
77406
- }),
77407
- lastFocusedMs: defaultOnError(number2().nullish(), () => {
77408
- return;
77409
- }),
77410
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77411
- return;
77412
- })
77413
- });
77414
- var zNesDiagnosticSeverity = union([
77415
- literal("error"),
77416
- literal("warning"),
77417
- literal("information"),
77418
- literal("hint")
77419
- ]);
77420
- var zNesDiagnostic = object({
77421
- uri: string2(),
77422
- range: zRange,
77423
- severity: zNesDiagnosticSeverity,
77424
- message: string2(),
77425
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77426
- return;
77427
- })
77428
- });
77429
- var zNesSuggestContext = object({
77430
- recentFiles: array(zNesRecentFile).nullish(),
77431
- relatedSnippets: array(zNesRelatedSnippet).nullish(),
77432
- editHistory: array(zNesEditHistoryEntry).nullish(),
77433
- userActions: array(zNesUserAction).nullish(),
77434
- openFiles: array(zNesOpenFile).nullish(),
77435
- diagnostics: array(zNesDiagnostic).nullish(),
77436
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77437
- return;
77438
- })
77439
- });
77440
- var zSuggestNesRequest = object({
77441
- sessionId: zSessionId,
77442
- uri: string2(),
77443
- version: number2(),
77444
- position: zPosition,
77445
- selection: zRange.nullish(),
77446
- triggerKind: zNesTriggerKind,
77447
- context: zNesSuggestContext.nullish(),
77448
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77449
- return;
77450
- })
77451
- });
77452
- var zCloseNesRequest = object({
77453
- sessionId: zSessionId,
77454
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77455
- return;
77456
- })
77457
- });
77458
77151
  var zClientRequest = object({
77459
77152
  id: zRequestId,
77460
77153
  method: string2(),
@@ -77475,9 +77168,6 @@ var zClientRequest = object({
77475
77168
  zSetSessionModeRequest,
77476
77169
  zSetSessionConfigOptionRequest,
77477
77170
  zPromptRequest,
77478
- zStartNesRequest,
77479
- zSuggestNesRequest,
77480
- zCloseNesRequest,
77481
77171
  zExtRequest
77482
77172
  ]).nullish()
77483
77173
  });
@@ -77643,79 +77333,6 @@ var zCancelNotification = object({
77643
77333
  return;
77644
77334
  })
77645
77335
  });
77646
- var zDidOpenDocumentNotification = object({
77647
- sessionId: zSessionId,
77648
- uri: string2(),
77649
- languageId: string2(),
77650
- version: number2(),
77651
- text: string2(),
77652
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77653
- return;
77654
- })
77655
- });
77656
- var zTextDocumentContentChangeEvent = object({
77657
- range: zRange.nullish(),
77658
- text: string2(),
77659
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77660
- return;
77661
- })
77662
- });
77663
- var zDidChangeDocumentNotification = object({
77664
- sessionId: zSessionId,
77665
- uri: string2(),
77666
- version: number2(),
77667
- contentChanges: array(zTextDocumentContentChangeEvent),
77668
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77669
- return;
77670
- })
77671
- });
77672
- var zDidCloseDocumentNotification = object({
77673
- sessionId: zSessionId,
77674
- uri: string2(),
77675
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77676
- return;
77677
- })
77678
- });
77679
- var zDidSaveDocumentNotification = object({
77680
- sessionId: zSessionId,
77681
- uri: string2(),
77682
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77683
- return;
77684
- })
77685
- });
77686
- var zDidFocusDocumentNotification = object({
77687
- sessionId: zSessionId,
77688
- uri: string2(),
77689
- version: number2(),
77690
- position: zPosition,
77691
- visibleRange: zRange,
77692
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77693
- return;
77694
- })
77695
- });
77696
- var zAcceptNesNotification = object({
77697
- sessionId: zSessionId,
77698
- id: zNesSuggestionId,
77699
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77700
- return;
77701
- })
77702
- });
77703
- var zNesRejectReason = union([
77704
- literal("rejected"),
77705
- literal("ignored"),
77706
- literal("replaced"),
77707
- literal("cancelled")
77708
- ]);
77709
- var zRejectNesNotification = object({
77710
- sessionId: zSessionId,
77711
- id: zNesSuggestionId,
77712
- reason: defaultOnError(zNesRejectReason.nullish(), () => {
77713
- return;
77714
- }),
77715
- _meta: defaultOnError(record(string2(), unknown()).nullish(), () => {
77716
- return;
77717
- })
77718
- });
77719
77336
  var zMessageMcpNotification = object({
77720
77337
  serverId: zMcpServerAcpId,
77721
77338
  requestId: zMcpRequestId,
@@ -77727,18 +77344,7 @@ var zMessageMcpNotification = object({
77727
77344
  });
77728
77345
  var zClientNotification = object({
77729
77346
  method: string2(),
77730
- params: union([
77731
- zCancelNotification,
77732
- zDidOpenDocumentNotification,
77733
- zDidChangeDocumentNotification,
77734
- zDidCloseDocumentNotification,
77735
- zDidSaveDocumentNotification,
77736
- zDidFocusDocumentNotification,
77737
- zAcceptNesNotification,
77738
- zRejectNesNotification,
77739
- zMessageMcpNotification,
77740
- zExtNotification
77741
- ]).nullish()
77347
+ params: union([zCancelNotification, zMessageMcpNotification, zExtNotification]).nullish()
77742
77348
  });
77743
77349
  var zCancelRequestNotification = object({
77744
77350
  requestId: zRequestId,
@@ -78489,6 +78095,12 @@ class RequestError extends Error {
78489
78095
  static resourceNotFound(uri) {
78490
78096
  return new RequestError(-32002, `Resource not found${uri ? `: ${uri}` : ""}`, uri && { uri });
78491
78097
  }
78098
+ static unsupportedProtocolVersion(requested, supported) {
78099
+ return new RequestError(-32022, "Unsupported protocol version", {
78100
+ requested,
78101
+ supported: [...supported]
78102
+ });
78103
+ }
78492
78104
  toResult() {
78493
78105
  return {
78494
78106
  error: {
@@ -78816,20 +78428,6 @@ var methods = {
78816
78428
  setConfigOption: AGENT_METHODS.session_set_config_option,
78817
78429
  prompt: AGENT_METHODS.session_prompt,
78818
78430
  cancel: AGENT_METHODS.session_cancel
78819
- },
78820
- nes: {
78821
- start: AGENT_METHODS.nes_start,
78822
- suggest: AGENT_METHODS.nes_suggest,
78823
- accept: AGENT_METHODS.nes_accept,
78824
- reject: AGENT_METHODS.nes_reject,
78825
- close: AGENT_METHODS.nes_close
78826
- },
78827
- document: {
78828
- didOpen: AGENT_METHODS.document_did_open,
78829
- didChange: AGENT_METHODS.document_did_change,
78830
- didClose: AGENT_METHODS.document_did_close,
78831
- didSave: AGENT_METHODS.document_did_save,
78832
- didFocus: AGENT_METHODS.document_did_focus
78833
78431
  }
78834
78432
  },
78835
78433
  client: {
@@ -79198,7 +78796,11 @@ function parseParams(parser, params) {
79198
78796
  return parser.parse(params);
79199
78797
  }
79200
78798
  function requestSpec(method, params, mapResponse) {
79201
- return { method, params, mapResponse };
78799
+ return {
78800
+ method,
78801
+ params: (value) => parseParams(params, value ?? {}),
78802
+ mapResponse
78803
+ };
79202
78804
  }
79203
78805
  function notificationSpec(method, params) {
79204
78806
  return { method, params };
@@ -79235,20 +78837,10 @@ var agentRequestSpecs = {
79235
78837
  unstable_setProvider: requestSpec(AGENT_METHODS.providers_set, zSetProviderRequest, emptyObjectResponse),
79236
78838
  unstable_disableProvider: requestSpec(AGENT_METHODS.providers_disable, zDisableProviderRequest, emptyObjectResponse),
79237
78839
  logout: requestSpec(AGENT_METHODS.logout, zLogoutRequest, emptyObjectResponse),
79238
- prompt: requestSpec(AGENT_METHODS.session_prompt, zPromptRequest),
79239
- unstable_startNes: requestSpec(AGENT_METHODS.nes_start, zStartNesRequest),
79240
- unstable_suggestNes: requestSpec(AGENT_METHODS.nes_suggest, zSuggestNesRequest),
79241
- unstable_closeNes: requestSpec(AGENT_METHODS.nes_close, zCloseNesRequest, emptyObjectResponse)
78840
+ prompt: requestSpec(AGENT_METHODS.session_prompt, zPromptRequest)
79242
78841
  };
79243
78842
  var agentNotificationSpecs = {
79244
- cancel: notificationSpec(AGENT_METHODS.session_cancel, zCancelNotification),
79245
- unstable_didOpenDocument: notificationSpec(AGENT_METHODS.document_did_open, zDidOpenDocumentNotification),
79246
- unstable_didChangeDocument: notificationSpec(AGENT_METHODS.document_did_change, zDidChangeDocumentNotification),
79247
- unstable_didCloseDocument: notificationSpec(AGENT_METHODS.document_did_close, zDidCloseDocumentNotification),
79248
- unstable_didSaveDocument: notificationSpec(AGENT_METHODS.document_did_save, zDidSaveDocumentNotification),
79249
- unstable_didFocusDocument: notificationSpec(AGENT_METHODS.document_did_focus, zDidFocusDocumentNotification),
79250
- unstable_acceptNes: notificationSpec(AGENT_METHODS.nes_accept, zAcceptNesNotification),
79251
- unstable_rejectNes: notificationSpec(AGENT_METHODS.nes_reject, zRejectNesNotification)
78843
+ cancel: notificationSpec(AGENT_METHODS.session_cancel, zCancelNotification)
79252
78844
  };
79253
78845
  var clientRequestSpecs = {
79254
78846
  requestPermission: requestSpec(CLIENT_METHODS.session_request_permission, zRequestPermissionRequest),
@@ -79551,20 +79143,10 @@ var legacyAgentRequestMethods = new Set([
79551
79143
  AGENT_METHODS.session_fork,
79552
79144
  AGENT_METHODS.session_resume,
79553
79145
  AGENT_METHODS.session_close,
79554
- AGENT_METHODS.logout,
79555
- AGENT_METHODS.nes_start,
79556
- AGENT_METHODS.nes_suggest,
79557
- AGENT_METHODS.nes_close
79146
+ AGENT_METHODS.logout
79558
79147
  ]);
79559
79148
  var legacyAgentNotificationMethods = new Set([
79560
- AGENT_METHODS.session_cancel,
79561
- AGENT_METHODS.nes_accept,
79562
- AGENT_METHODS.nes_reject,
79563
- AGENT_METHODS.document_did_open,
79564
- AGENT_METHODS.document_did_change,
79565
- AGENT_METHODS.document_did_close,
79566
- AGENT_METHODS.document_did_save,
79567
- AGENT_METHODS.document_did_focus
79149
+ AGENT_METHODS.session_cancel
79568
79150
  ]);
79569
79151
  var legacyClientRequestMethods = new Set([
79570
79152
  CLIENT_METHODS.session_request_permission,
@@ -79619,36 +79201,6 @@ function legacyAgentApp(implementation) {
79619
79201
  if (implementation.logout) {
79620
79202
  app.onRequest(AGENT_METHODS.logout, async (ctx) => await implementation.logout(ctx.params) ?? {});
79621
79203
  }
79622
- if (implementation.unstable_startNes) {
79623
- app.onRequest(AGENT_METHODS.nes_start, (ctx) => implementation.unstable_startNes(ctx.params));
79624
- }
79625
- if (implementation.unstable_suggestNes) {
79626
- app.onRequest(AGENT_METHODS.nes_suggest, (ctx) => implementation.unstable_suggestNes(ctx.params));
79627
- }
79628
- if (implementation.unstable_closeNes) {
79629
- app.onRequest(AGENT_METHODS.nes_close, async (ctx) => await implementation.unstable_closeNes(ctx.params) ?? {});
79630
- }
79631
- if (implementation.unstable_didOpenDocument) {
79632
- app.onNotification(AGENT_METHODS.document_did_open, (ctx) => implementation.unstable_didOpenDocument(ctx.params));
79633
- }
79634
- if (implementation.unstable_didChangeDocument) {
79635
- app.onNotification(AGENT_METHODS.document_did_change, (ctx) => implementation.unstable_didChangeDocument(ctx.params));
79636
- }
79637
- if (implementation.unstable_didCloseDocument) {
79638
- app.onNotification(AGENT_METHODS.document_did_close, (ctx) => implementation.unstable_didCloseDocument(ctx.params));
79639
- }
79640
- if (implementation.unstable_didSaveDocument) {
79641
- app.onNotification(AGENT_METHODS.document_did_save, (ctx) => implementation.unstable_didSaveDocument(ctx.params));
79642
- }
79643
- if (implementation.unstable_didFocusDocument) {
79644
- app.onNotification(AGENT_METHODS.document_did_focus, (ctx) => implementation.unstable_didFocusDocument(ctx.params));
79645
- }
79646
- if (implementation.unstable_acceptNes) {
79647
- app.onNotification(AGENT_METHODS.nes_accept, (ctx) => implementation.unstable_acceptNes(ctx.params));
79648
- }
79649
- if (implementation.unstable_rejectNes) {
79650
- app.onNotification(AGENT_METHODS.nes_reject, (ctx) => implementation.unstable_rejectNes(ctx.params));
79651
- }
79652
79204
  if (implementation.extMethod) {
79653
79205
  app[appBuilder]().withHandler({
79654
79206
  handleMessage: async (message) => {
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/todoforai/cli.git"
8
8
  },
9
- "version": "0.1.67",
9
+ "version": "0.1.69",
10
10
  "type": "module",
11
11
  "bin": {
12
12
  "todoforai-cli": "bin/todoforai-cli.js",