MCPcopy Index your code
hub / github.com/adobe-research/fondue

github.com/adobe-research/fondue @0.5.4

Chat with this repo
repository ↗ · DeepWiki ↗ · release 0.5.4 ↗ · + Follow
393 symbols 1,245 edges 27 files 21 documented · 5%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

fondue

Collect real-time JavaScript traces (number of times a function has been called, locations where exceptions have been thrown, etc).

Easily instrument an entire program with node-theseus.

Plain objects are returned from all API calls so that they can be passed around as JSON. node-theseus does this with a WebSocket. Theseus does it over Chrome's Remote Debugging API (which boils down to a WebSocket).

Build Status

Install

npm install fondue

Use

Execute instrumented code:

var fondue = require('fondue'),
    vm = require('vm');

var src = fondue.instrument('function foo(a) { return a * 2 }; foo(4)');
var sandbox = { __tracer: undefined };
var output = vm.runInNewContext(src, sandbox);
var tracer = sandbox.__tracer; // created by fondue when instrumented code is run

Track trace points (functions, call sites, etc):

var functions = {};
var nodesHandle = tracer.trackNodes();
tracer.newNodes(nodesHandle).forEach(function (n) {
    if (n.type === 'function') {
        functions[n.name] = n;
    }
});

var fooNode = functions['foo'];
console.log('foo started at', fooNode.start, 'and ended at', fooNode.end);

// call tracer.newNodes() periodically if you expect new code to be required over time

Track hit counts:

// check how many times trace points have been hit
var hitsHandle = tracer.trackHits();
var hits1 = tracer.hitCountDeltas(hitsHandle);
console.log('foo was called ' + (hits1[fooNode.id] || 0) + ' time');

// call repeatedly to track hit counts over time
var hits2 = tracer.hitCountDeltas(hitsHandle);
console.log('foo was called ' + (hits2[fooNode.id] || 0) + ' times (since last check)');

Access function arguments and return values (and unhandled exceptions):

var logHandle = tracer.trackLogs({ ids: [fooNode.id] });
var invocations = tracer.logDelta(logHandle);
console.log('foo returned:', invocations[0].returnValue);
console.log('foo accepted arguments:', invocations[0].arguments);

Core symbols most depended-on inside this repo

warning
called by 148
lib/fondue.browser.js
match
called by 148
lib/fondue.browser.js
expect
called by 105
lib/fondue.browser.js
throwError
called by 90
lib/fondue.browser.js
advance
called by 88
lib/fondue.browser.js
lex
called by 85
lib/fondue.browser.js
warningAt
called by 51
lib/fondue.browser.js
throwErrorTolerant
called by 44
lib/fondue.browser.js

Shape

Function 393

Languages

TypeScript100%

Modules by API surface

lib/fondue.browser.js290 symbols
lib/tracer.js53 symbols
index.js17 symbols
test/scripts/logs-backtrace.js3 symbols
test/scripts/logs-async.js3 symbols
test/scripts/auto-bail.js3 symbols
test/test-nodes.js2 symbols
test/test-logs.js2 symbols
test/test-exceptions.js2 symbols
test/scripts/nodes.js2 symbols
test/scripts/node-events-logs.js2 symbols
test/scripts/manual-bail.js2 symbols

For agents

$ claude mcp add fondue \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact