CLICLItypeA command you run, rather than a dependency you import.See every one →What this type is →independently maintainedindependently maintainedoriginPublished by one person or a small company outside SAP. Says nothing about quality; the readings say that.See every one →

@saptools/cf-explorer

Searches the files of an app deployed to SAP BTP Cloud Foundry over cf ssh, finding the app root, grepping the deployed code and turning matches into file and line candidates.

Finding the code an app on Cloud Foundry is actually running is, by hand, a loop of cf ssh, locating the app root, searching and reading the line, repeated after every wrong guess. cf-explorer makes each step a bounded command (roots, ls, find, grep, view), and inspect-candidates turns a text match into suggested breakpoint locations with their remote root. For many reads, session start keeps one SSH connection open behind a local broker, and the same commands are available as a typed Node.js API. Commands are built from templates that reject arbitrary shell text, and none uploads, edits or deletes a file; the one change it makes is to enable SSH and restart the app when SSH is disabled.

Facts

Latestv0.5.1ReleasedLast pushLicenceMIT

Where it sits

Lives in
Provides
DebuggingCAPDebuggingcapabilitySeeing what running code did between an input arriving and a result coming out: which code ran, what the values were at each point, and why a value ended up as it did.
Runs
Cloud Foundry
Requires
SAP BTP, Cloud Foundry RuntimeSAP BTP, Cloud Foundry RuntimeartifactThe target is an app deployed to SAP BTP Cloud Foundry, read through cf ssh.

Who is behind it

Đông TrầnĐông TrầnPersonMaintains this
In the atlas: maintains 18, contributes to 18
@dongitran
maintainer

What it declares

Every artifact

Type
CLI
Origin
Independently maintained
Runs on
Cloud Foundry

As a CLI

Distributed through
npm

Connections2

Install

npm add @saptools/cf-explorer

Derived from the package name. No recipe recorded; the README has the configuration.

Where @saptools/cf-explorer runsYour SAP BTP subaccountBy its type: a CLI is run from a terminalcallsdocumentedrequiresYour terminal, actorYour terminal@saptools/cf-explorer, module@saptools/cf-explorerSAP BTP, Cloud Foundry Runtime, service instanceSAP BTP, CloudFoundry Runtime
SAPnot SAP's, or the project's ownstated in the documentdocumented only

README

quoted from dongitran/saptools under MIT, read
dongitran/saptools/packages/cf-explorer/README.mdOn GitHub

🛰️ @saptools/cf-explorer

Fast, safe Cloud Foundry runtime discovery for SAP BTP workflows.

Find app roots, search deployed code, inspect line context, reuse SSH sessions, and produce precise file/line candidates for people, scripts, and downstream tools through a beautiful CLI and a typed Node.js API.

npm version node typescript cloud foundry

Why • Install • Quick Start • CLI • API • Sessions • Safety


✨ Why

Cloud Foundry app exploration often starts with a slow, repetitive loop:

  1. Open cf ssh.
  2. Find where the deployed app actually lives.
  3. Search filenames and content.
  4. Inspect the exact runtime line.
  5. Turn the match into a useful file/line location.
  6. Repeat after every wrong guess.

cf-explorer turns that loop into a structured workflow:

  • 🔎 Discover deployed app roots and runtime files.
  • 🧭 Map grep results into reusable file/line candidates.
  • ⚡ Reuse one SSH-backed session when many reads are needed.
  • 🧩 Import the same behavior from another Node.js project.
  • 🛡️ Protect inputs with bounded commands; SSH is enabled and restarted automatically when needed.

🚀 What It Does

CapabilityPurpose
rootsLocate likely app roots with bounded read-only probes
instancesShow app process instance indexes and status
lsList direct children under a known remote directory
findSearch filenames under a remote root
grepSearch remote file content and return path + line
viewPrint a bounded line window around a remote file location
inspect-candidatesSuggest candidate paths, line numbers, and root mappings
session startKeep one SSH-backed broker alive for fast repeated reads

📦 Install

npm install -g @saptools/cf-explorer

Updates

Every command first checks npm for a newer @saptools/cf-explorer (at most once an hour, one small request with a 2-second timeout) and, when one exists, installs that exact version with the package manager that owns the running binary and re-runs the command you typed on the new version. Both steps are announced on stderr; nothing is printed when the install is already current:

cf-explorer: updating 0.5.0 -> 0.6.0 ...
cf-explorer: updated to 0.6.0; re-running the command

If the install cannot complete, one stderr line gives the manual command and the command runs on the installed version; that version is not retried for a day. cf-explorer self-update forces the check and install now; cf-explorer self-update --check only reports.

ControlEffect
SAPTOOLS_AUTO_UPDATE=on|notify|offon (default) installs and re-runs; notify prints the manual command once per version; off never checks. Applies to every @saptools CLI.
CF_EXPLORER_AUTO_UPDATEsame values, this CLI only; wins over the global variable
SAPTOOLS_UPDATE_INTERVAL_MINUTESminutes between checks (default 60; 0 checks on every run)
SAPTOOLS_NPM_REGISTRYregistry to check and install from (default: npm's configured registry, then npmjs)
SAPTOOLS_UPDATE_DEBUG=1explain on stderr why nothing happened

The updater switches itself off in CI (CI set), under NODE_ENV=test or NO_UPDATE_NOTIFIER, when the binary runs from a source checkout, an npm link or an npx cache, and inside the re-run itself. It never writes to stdout, never asks for input, never uses sudo, and never moves onto a prerelease. Its state lives in ~/.saptools/updates/.

🔐 Credentials

cf-explorer uses the same environment variables as the other SAP tools packages:

export SAP_EMAIL="user@example.com"
export SAP_PASSWORD="your-password"

Optional overrides:

export CF_EXPLORER_CF_BIN="/path/to/cf"
export CF_EXPLORER_HOME="$HOME/.saptools/cf-explorer"

Credential handling is intentionally conservative:

  • credentials are resolved from env by default;
  • SAP_EMAIL and SAP_PASSWORD are stripped from normal child-process env after resolution;
  • cf auth should receive credentials through scoped child env variables;
  • secrets, tokens, and remote file contents are not written to session state.

⚡ Quick Start

Find a root, search for code, inspect context, then reuse the location in your next command, script, editor, or debugging tool.

cf-explorer roots \
  --region region-key \
  --org org-name \
  --space space-name \
  --app app-name
cf-explorer ls \
  --region region-key \
  --org org-name \
  --space space-name \
  --app app-name \
  --path /app-root
cf-explorer grep \
  --region region-key \
  --org org-name \
  --space space-name \
  --app app-name \
  --root /app-root \
  --text "needle"
cf-explorer view \
  --region region-key \
  --org org-name \
  --space space-name \
  --app app-name \
  --file /app-root/src/handler.js \
  --line 42 \
  --context 6

Generate reusable file/line candidates:

cf-explorer inspect-candidates \
  --region region-key \
  --org org-name \
  --space space-name \
  --app app-name \
  --text "needle"

🧰 CLI

Check the installed CLI version:

cf-explorer --version

All read/discovery commands accept:

FlagDescription
--region <key>CF region key resolved through the SAP tools region catalog
--org <name>CF org
--space <name>CF space
--app <name>CF app
--process <name>CF process name, default web
--instance <index>One app process instance; defaults to the first/default instance (0)
--timeout <seconds>Command timeout
--max-files <count>Result limit for path-like discovery and inspect file-candidate scans
--max-matches <count>Result limit for grep, session grep, and inspect-candidates content matches
--max-bytes <bytes>Output byte limit
--follow-symlinksFollow symlinked directories during find/grep traversal for pnpm-style layouts

Single-shot and session commands write compact human-readable results directly to stdout. If a discovery result exceeds a count limit, the CLI keeps stdout unchanged and writes a truncation warning to stderr. A single-shot response that reaches its byte limit produces the same warning; a persistent-session request instead fails with OUTPUT_LIMIT_EXCEEDED. Increase --max-matches, --max-files, or --max-bytes, as appropriate, and retry.

🪄 Discovery
cf-explorer roots --region region-key --org org-name --space space-name --app app-name
cf-explorer instances --region region-key --org org-name --space space-name --app app-name
cf-explorer ls --region region-key --org org-name --space space-name --app app-name --path /app-root --pattern "*helper*"
cf-explorer find --region region-key --org org-name --space space-name --app app-name --root /app-root --name "*handler*.js"
cf-explorer grep --region region-key --org org-name --space space-name --app app-name --root /app-root --text "needle" --max-matches 20 --follow-symlinks
cf-explorer view --region region-key --org org-name --space space-name --app app-name --file /app-root/src/handler.js --line 42 --context 8
🎯 File/Line Candidates
cf-explorer inspect-candidates \
  --region region-key \
  --org org-name \
  --space space-name \
  --app app-name \
  --text "needle"

inspect-candidates prints sectioned roots, content matches, and suggested breakpoints. Use --max-matches to bound breakpoint-oriented search output. The typed API can additionally populate its files array when called with includeFiles: true; compact CLI output does not render that array.

Suggested breakpoint shape from the typed API:

{
  "instance": 0,
  "bp": "/app-root/src/handler.js",
  "remoteRoot": "/app-root",
  "line": 42,
  "confidence": "high",
  "reason": "content match"
}
🔁 SSH Access

SSH-backed commands automatically enable app SSH and restart the app when SSH is disabled.

🧵 Persistent Sessions

One-shot mode is simple: each CLI invocation opens a fresh cf ssh, runs one bounded command, and exits. Persistent mode is for deeper exploration where that round trip becomes the bottleneck.

cf-explorer session start \
  --region region-key \
  --org org-name \
  --space space-name \
  --app app-name \
  --instance 0 \
  --idle-timeout 900 \
  --max-lifetime 3600

cf-explorer session list
cf-explorer session status --session-id <id>

cf-explorer session ls --session-id <id> --path /app-root
cf-explorer session grep --session-id <id> --root /app-root --text "needle"
cf-explorer session view --session-id <id> --file /app-root/src/handler.js --line 42

cf-explorer session stop --session-id <id>

--idle-timeout and --max-lifetime are optional seconds-based guards for the local broker process.

🛰️ How Session Reuse Works

Persistent sessions use a local broker process:

CLI command
  -> local IPC socket
    -> cf-explorer broker
      -> live cf ssh child process
        -> remote sh

The broker is the only process that owns the live SSH stdin/stdout streams. sessions.json is only an index; it is not the command channel.

The broker:

  • opens one cf ssh --disable-pseudo-tty --process <process> -i <index> -c sh;
  • performs a startup handshake;
  • accepts newline-delimited JSON requests over local IPC;
  • validates each request against known explorer commands;
  • queues one remote command at a time;
  • wraps remote output in sentinel markers;
  • enforces timeouts, output limits, and stale-session cleanup.

🧑‍💻 TypeScript API

import {
  attachExplorerSession,
  createExplorer,
  listExplorerSessions,
  startExplorerSession,
  stopExplorerSession,
} from "@saptools/cf-explorer";

const explorer = await createExplorer({
  target: {
    region: "region-key",
    org: "org-name",
    space: "space-name",
    app: "app-name",
  },
});

const rootsResult = await explorer.roots();
const root = rootsResult.roots[0] ?? "/app-root";
const entries = await explorer.ls({ path: root, instance: 0 });

const matches = await explorer.grep({
  root,
  text: "needle",
  instance: 0,
});

await explorer.dispose();

Broker-backed session:

const session = await startExplorerSession({
  target: {
    region: "region-key",
    org: "org-name",
    space: "space-name",
    app: "app-name",
  },
  instance: 0,
});

const attached = await attachExplorerSession(session.sessionId);
const entries = await attached.ls({ path: "/app-root" });
const result = await attached.grep({ root: "/app-root", text: "needle" });

await stopExplorerSession({ sessionId: session.sessionId });

🛡️ Safety Model

cf-explorer is designed around a narrow safety boundary.

Read-only discovery commands:

  • generate remote commands from templates;
  • reject arbitrary shell text;
  • quote user-provided values;
  • reject NUL bytes, newlines, unsafe roots, and invalid instance selectors;
  • enforce output, file, context, depth, and timeout limits;
  • prune noisy folders such as node_modules, .git, dist, build, and .cache;
  • omit grep previews unless explicitly requested. Preview and view output can contain remote file content, so it is returned only to the caller and is not stored in session state.

Automatic SSH access:

  • checks SSH before opening SSH-backed reads;
  • runs cf enable-ssh and cf restart only when SSH is disabled;
  • marks related persistent sessions stale after restart.

No command uploads, edits, deletes, installs packages, changes permissions, or opens an unrestricted interactive shell.


🗂️ Local State

All package-owned files live under:

~/.saptools/cf-explorer/
  sessions.json
  sessions.lock
  sockets/
    <session-id>.sock
  cf-homes/
    <session-id>/
  tmp/
    <run-id>/
  logs/

Rules:

  • sessions.json stores only non-secret session metadata.
  • Persistent CF_HOME folders are treated as sensitive and removed on session stop.
  • Temp files are deleted after one-shot workflows.
  • Logs must not contain credentials or remote file contents.
  • Stale sessions are pruned by hostname, broker PID, SSH PID, and socket health.

📤 Result Metadata

Typed API discovery results include metadata:

interface ExplorerMeta {
  target: {
    region: string;
    org: string;
    space: string;
    app: string;
  };
  process: string;
  instance?: number;
  durationMs: number;
  truncated: boolean;
}

meta.truncated is true when a returned one-shot response reached maxBytes or when a returned one-shot or session result exceeded the requested maxFiles or maxMatches window. The returned data is incomplete; increase the corresponding limit and retry. The CLI exposes the same condition through its stderr warning while keeping result stdout compact. Persistent-session requests that exceed maxBytes fail with OUTPUT_LIMIT_EXCEEDED instead of returning partial result metadata.


🧯 Error Codes

CodeMeaning
MISSING_CREDENTIALSSAP_EMAIL or SAP_PASSWORD is missing
UNKNOWN_REGIONRegion key is not known
CF_LOGIN_FAILEDcf api or cf auth failed
CF_TARGET_FAILEDcf target failed
APP_NOT_FOUNDTarget app was not found
SSH_DISABLEDSSH could not be used after automatic preparation
INSTANCE_NOT_FOUNDRequested app process instance is unavailable
UNSAFE_INPUTInput failed validation
OUTPUT_LIMIT_EXCEEDEDRemote output exceeded configured limits
REMOTE_COMMAND_FAILEDA bounded remote command failed
SESSION_NOT_FOUNDThe requested persistent session does not exist
SESSION_STALEThe persistent session is no longer usable
SESSION_BUSYPersistent broker queue is full
BROKER_UNAVAILABLEThe broker process is not reachable
IPC_FAILEDLocal IPC request failed
SESSION_PROTOCOL_ERRORPersistent shell marker parsing failed
SESSION_HANDSHAKE_FAILEDPersistent shell startup handshake failed
SESSION_RECOVERY_FAILEDBroker could not recover the remote shell
ABORTEDThe caller aborted the operation


👨‍💻 Author

dongtran ✨

📄 License

MIT


Made with ❤️ to make your work life easier!

MIT, read

History

Latest

v0.5.1

Other 1

Notes
  • Accept the self-updating releases of @saptools/cf-sync as dependencies (range widened, no behaviour change).
  1. v0.5.0

    Other 1

    Notes
    • Self-updating. Every command now checks npm for a newer @saptools/cf-explorer (at most once an hour) and, when one exists, installs that exact version and re-runs the command on it, announcing both steps on stderr. SAPTOOLS_AUTO_UPDATE=on|notify|off controls it (see the README's Updates section); it is off by itself in CI, in tests, from a source checkout and inside the re-run. New cf-explorer self-update [--check] forces the check and install now. --version now reads package.json at runtime. Both come from the private, build-time-bundled @saptools/core package; the published tarball gains no runtime dependency.
  2. v0.4.0

    Breaking 1, Fixes 1

    Notes
    Breaking changes
    • Standardized all one-shot discovery and persistent-session result commands on compact human-readable stdout.
    Bug fixes
    • Made count-limited roots, ls, find, grep, and inspect-candidates results probe one extra row so both one-shot and session APIs set ExplorerMeta.truncated exactly when more results exist. The same field remains true for byte-limited responses, and the CLI now warns on stderr when either limit makes a result incomplete.
  3. v0.2.14

    Fixes 1

    Notes
    Bug fixes
    • Stopped reporting the Linux FHS /srv directory as an app root during root discovery.
  4. v0.2.13

    Other 3

    Notes
    Hardening
    • Rejected timeout values above Node.js timer limits across one-shot CF calls, IPC requests, persistent shell commands, broker timers, and CLI seconds-based flags.
    • Validated explicit API endpoint overrides in resolveApiEndpoint with the same control-character checks used by normalized targets.
    Maintenance
    • Split persistent-session CLI command registration into smaller focused helpers without changing command behavior.
  5. v0.2.11

    Other 1

    Notes
    Maintenance
    • Removed obsolete one-line source wrapper modules and pointed internal tests and package-root exports at the focused implementation folders.
  6. v0.2.10

    Other 1

    Notes
    Maintenance
    • Reorganized source modules into focused CLI, CF, discovery, broker, session, and core folders while preserving existing public imports and runtime behavior.
  7. v0.2.9

    Other 1

    Notes
    Maintenance
    • Split persistent SSH shell handling into a focused broker module with direct unit coverage, keeping persistent-session behavior unchanged.
  8. v0.2.8

    Other 1

    Notes
    Maintenance
    • Split CLI human-output rendering into a focused module with unit coverage, keeping command behavior unchanged while reducing the main CLI file size.
  9. v0.2.7

    Features 2

    Notes
    Improvements
    • Added root --version output for quick installed CLI checks.
    • Added session start --idle-timeout and --max-lifetime flags to expose the existing broker timer controls from the CLI.
  10. v0.2.6

    Features 1

    Notes
    Improvements
    • Added read-only ls commands for one-level remote directory listings in one-shot and persistent-session workflows.
  11. v0.2.5

    Features 1, Fixes 2

    Notes
    Bug fixes
    • Dropped incomplete trailing protocol rows from truncated one-shot remote output so partial paths are not reported as real discovery results.
    • Parsed only the timestamp-like since column from detailed CF app instance rows instead of storing later resource columns in the same field.
    Improvements
    • Added --timeout and --max-bytes to persistent-session read commands, matching the existing API and broker per-request limit support.
  12. v0.2.4

    Fixes 3

    Notes
    Bug fixes
    • Fixed view output on Cloud Foundry containers by emitting line protocol rows directly from awk instead of relying on nl separator behavior.
    • Changed session stop to return structured JSON with a stopped-session count instead of a primitive number.
    • Fixed a broker shutdown race that could leave a stale session lock after session stop.
  13. v0.2.3

    Fixes 1, Other 2

    Notes
    Bug fixes
    • Classified CF command failures before redacting detail text, preserving typed errors when credential values overlap with CF error keywords.
    Hardening
    • Added bounded IPC request/response buffering for persistent-session sockets.
    • Validated broker bootstrap payloads before starting broker session work.
  14. v0.2.2

    Fixes 3, Other 3

    Notes
    Bug fixes
    • Preserved explicit credential passwords exactly instead of trimming leading or trailing characters.
    • Propagated timeout/output limits to cf app and lifecycle CF calls.
    • Tightened malformed grep/protocol numeric parsing.
    Hardening
    • Redacted generated one-shot SSH scripts from CF failure details.
    • Validated CF runner timeout/output limits before spawning child processes.
    • Handled persistent SSH shell spawn errors without an unhandled broker error.
  15. v0.2.1

    Fixes 5

    Notes
    Bug fixes
    • Grep parsing now treats tab-delimited output as fixed fields, so preview text cannot be mistaken for the path or line delimiter.
    • Persistent broker command failures now return typed IPC errors instead of escaping from stdout event handlers.
    • Persistent sessions update lastUsedAt on broker requests.
    • Session registration rejects duplicate explicit session ids.
    • CF child-process collection now settles once across abort, timeout, spawn error, and close races.
  16. v0.2.0

    Fixes 10, Performance 2, Other 6

    Notes
    Bug fixes
    • IPC server now drains every newline-terminated request in a single chunk instead of stopping after the first one (src/ipc.ts).
    • Broker marks the session stale and shuts down when the persistent SSH shell exits or stderr reports closed, so session list/status no longer reports a dead session as ready (src/broker.ts).
    • runtime.timeoutMs and runtime.maxBytes now propagate to cf ssh for one-shot discovery commands, not just to cf api/auth/target (src/runner.ts).
    • --no-json produces concise human-readable output for every result shape instead of falling back to JSON (src/cli.ts).
    • INSTANCE_NOT_FOUND is raised when --all-instances finds no running instances and when cf ssh reports an out-of-range index. The previously declared but unused error codes are now actually emitted (src/api.ts, src/cf.ts).
    • SESSION_HANDSHAKE_FAILED is raised when the persistent shell handshake produces unexpected output or times out (src/broker.ts).
    • Crashed-broker session files (cf-homes/<id> and sockets/<id>.sock) are cleaned up the next time listExplorerSessions prunes the index, instead of lingering indefinitely (src/storage.ts).
    • session start CLI no longer accepts --all-instances, matching the API contract that persistent sessions target one instance (src/cli.ts).
    • Broker stop responses are flushed to the socket before the process exits, removing a 10 ms race that could drop the response (src/ipc.ts, src/broker.ts).
    • Legacy grep delimiter pattern uses non-greedy path matching so a colon in a preview no longer truncates the path (src/parsers.ts).
    Hardening
    • The fallback Unix socket directory is now scoped to the current user (/tmp/saptools-cf-explorer-<uid>/) and is chmod 0700 enforced after every IPC server bind, even when the directory pre-existed (src/paths.ts, src/ipc.ts).
    • Broker process clears SAP_EMAIL, SAP_PASSWORD, CF_USERNAME and CF_PASSWORD from process.env after CF auth so they do not leak through /proc/<pid>/environ for the broker's lifetime (src/broker.ts, src/cf.ts).
    • Redaction skips values shorter than 4 characters to prevent common-word passwords from corrupting unrelated text (src/redaction.ts).
    • terminateProcess helper avoids self-kill and tolerates process-not-found race conditions when stopping broker sessions (src/session.ts).
    Performance
    • --all-instances discovery commands share one prepared CF session across parallel SSH calls instead of authenticating again per instance (src/api.ts, src/runner.ts).
    • Root-discovery find / -maxdepth 4 now prunes noisy directories (node_modules, .git, dist, build, .cache, tmp, temp) before enumerating files (src/commands.ts).
    Cleanups
    • Dropped the unused RemoteScript.operation field; remote scripts only expose the script body now (src/commands.ts).
    • Coverage thresholds are gated by a documented exclusion list (broker, CLI, index barrel, type module). Session storage and target helpers now sit inside the gate (vitest.config.ts).
  17. v0.1.1

    Other 1

    Notes
    • Initial release.
2downloads per week, npm
Weekly downloads for @saptools/cf-explorer26 complete calendar weeks from 2026-04-27 to 2026-10-25; the latest total is 2.27 Apr – 3 May: 1,4994 May – 10 May: 8511 May – 17 May: 4818 May – 24 May: 3325 May – 31 May: 341 Jun – 7 Jun: 438 Jun – 14 Jun: 5115 Jun – 21 Jun: 1822 Jun – 28 Jun: 27429 Jun – 5 Jul: 1,0346 Jul – 12 Jul: 6113 Jul – 19 Jul: 19020 Jul – 26 Jul: 19527 Jul – 2 Aug: 273 Aug – 9 Aug: 7110 Aug – 16 Aug: 6017 Aug – 23 Aug: 3824 Aug – 30 Aug: 2231 Aug – 6 Sept: 2767 Sept – 13 Sept: 3914 Sept – 20 Sept: 2821 Sept – 27 Sept: 2928 Sept – 4 Oct: 125 Oct – 11 Oct: 1312 Oct – 18 Oct: 1219 Oct – 25 Oct: 2
Debugging
  1. dbg_value_statementDebugger script generating a VALUE statement for a variablefrom ABAP
  2. dump_infoDisplays the variables of ABAP short dumpsfrom ABAP
  3. com.sap.cds:cds-feature-consoleConnects a running CAP Java app to CAP console for monitoringfrom CAP
  4. com.sap.cds:cds-feature-dev-dashboardBrowser dashboard for a running CAP Java service during developmentfrom CAP
  5. @cap-js/consoleConnects a running CAP application to the CAP consolefrom CAP
  6. @cap-js/data-inspectorInspects database entities and contents at CAP service levelfrom CAP
  7. abapsmithABAP MCP server over ADT with a local journal that can undo writesfrom ABAP
  8. sap-cap-debuggerAttaches a debugger to a CAP app running on Cloud Foundryfrom CAP
  9. ABAP-Object-VisualizerDebugger script exporting an object hierarchy as Graphvizfrom ABAP
  10. abap_debugger_object_graph_extensionABAP debugger extension drawing objects as a Graphviz graphfrom ABAP
  11. Graphviz-browserStatic page drawing Graphviz graphs for the ABAP debugger extensionfrom ABAP
  12. ABAP remote filesystemVS Code extension editing ABAP systems over ADT as a filesystemfrom ABAP
  13. @sap/cds-dkCommand line client and development toolkit for CAPfrom CAP
  14. @saptools/cf-debuggerNode.js inspector tunnel over cf ssh to Cloud Foundry appsfrom BTP/BAIP
  15. @saptools/cf-function-traceStep-by-step state recorder for one JavaScript function in Node.jsfrom BTP/BAIP
  16. @saptools/cf-hanaSQL runner against the SAP HANA Cloud database bound to a CF appfrom BTP/BAIP
  17. @saptools/cf-inspectorShell debugger for remote Node.js over the Chrome DevTools Protocolfrom BTP/BAIP
  18. @saptools/cf-live-traceHTTP trace hook streaming a running CF Node.js app's trafficfrom BTP/BAIP
  19. @saptools/cf-request-runnerEndpoint discovery for CAP services deployed to Cloud Foundryfrom CAP
  20. @saptools/service-flowStatic end-to-end tracer of one CAP operation across repositoriesfrom CAP
  21. Smart DebuggerSAP GUI debugger script recording steps so execution can run backwardsfrom ABAP

Details

Sources4
Added by handdiscovered herechecked
npm registry, @saptools/cf-explorerversion, releases, installschecked
github.com/git+https://github.com/dongitran/saptools.gittree, pushes, contributors, CIchecked
packages/cf-explorer/README.mdquoted, and what the entry declareschecked

Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.

Compatibility and provenance
deploymentCloud Foundry
latestv0.5.1
first release
releases and cadence25, ~0d median
discovered viaAdded by hand
first seen in the atlas
ecosystem and domainbtp, developer-experience
History in the atlas1
  1. First seen.
For your agent
Ref
artifact:saptools-cf-explorer
JSON
/artifacts/saptools-cf-explorer.json
MCP
Connecting an agent