Skip to content

NPM client

@igentify/helix-flowgraph is the integrator CLI and library for Helix Flowgraph: query the latest workspace graph and orchestrate scans from scripts or agents.

Install

Add to .npmrc (project or ~/.npmrc):

ini
@igentify:registry=https://igentify-488414467642.d.codeartifact.us-east-1.amazonaws.com/npm/npm/

Then:

bash
npm install @igentify/helix-flowgraph

Authentication uses the Query API key in SSM (/helix/flowgraph/api-key) for cloud commands. The CLI loads it with your AWS credentials (AWS_PROFILE or --profile). Default API host: https://helix-flow.igentify.in.

Local mode (--local) runs bundled ingest + helix-agent on filesystem paths — no AWS, no SSM, no Step Functions, no helix-flowgraph clone. npx / npm install is sufficient for both cloud and local; the same CLI commands apply (query, scan, list).

SurfaceCloud (default)Local (--local)
query features
query unbridged
query repo=…✓ (with AI summaries when scan has ai/)
list / scan list— (cloud scan history)
scan start✓ (GitHub workspace)✓ (--repo-path, bundled ingest + AI)
scan status / watch / cancel— (local scans are synchronous)
query … --scan-id✓ (any READY scan)✓ (./scans/<id>/)
query … --workspace-id✓ (that workspace’s LATEST)

Run npx @igentify/helix-flowgraph --help for the full command reference.

Local mode (filesystem scan + query)

Scan a checkout on disk and query the resulting graph without touching AWS:

bash
# npx only — no helix-flowgraph clone required
npx @igentify/helix-flowgraph scan start --local \
  --repo-path ~/code/igentify/report-builder-service

npx @igentify/helix-flowgraph query features --local
npx @igentify/helix-flowgraph query repo=report-builder-service --local
npx @igentify/helix-flowgraph query unbridged --local
WhatBehavior
Outputscans/<scanId>/ under your project cwd (default ./scans); updates scans/latest symlink
Default pipelineFeature YAML binding + full helix-agent AI (same stages as cloud, local disk only)
SpeedIngest ~seconds; AI minutes–hours depending on repo size and LLM provider
Opt out--technical-only — AST graph only (no features, no AI)
CloudNo S3 upload, no scan list entry

Local options

OptionPurpose
--localLocal ingest (scan) or in-process graph read (query)
--repo-path <path>Local repository root (scan start --local; repeat for multiple)
--out <dir>Scans output base (default ./scans)
--technical-onlyAST-only: skip feature YAML binding and all AI passes
--no-update-latestDo not symlink scans/latest after scan
--graph-path <path>Override graph file for local query
--scan-root <path>Scan folder (AI artifacts) for local query
--scan-id <id>Query a specific READY scan (cloud S3 or local ./scans/<id>/)
--workspace-id <id>Cloud: query that workspace’s LATEST READY scan (default: canonical workspace)

Local environment variables

VariablePurpose
HELIX_GRAPH_PATHGraph file for query --local (default: scans/latest/reports/technical-graph.json)
HELIX_SCAN_ROOTScan folder for AI artifact paths
HELIX_SCANS_DIROverride scans output directory
HELIX_LOCAL=1Same as --local
typescript
import { startLocalScan, queryFeatures, queryRepos } from "@igentify/helix-flowgraph";

const result = await startLocalScan({
  repoPaths: ["~/code/igentify/report-builder-service"],
});
// result: { local: true, scanId, status: "READY", graphPath, scanRoot, runtime: "bundle", ... }
await queryRepos("report-builder-service", { local: true });

Query commands

Read data from a READY scan graph (default: canonical workspace LATEST; override with --scan-id or --workspace-id).

CommandWhat it does
query featuresList Feature nodes (id, name, flowKey). Use to discover feature ids before opening a feature neighbourhood.
query unbridgedList backend ApiEndpoint nodes with no FE→BE bridge — no CALLS_REMOTE chain from a frontend client call. Same set as the UI “Unbridged endpoints” view.
query repo=<repoKey>Repo subgraph: nodes, edges, and AI summaries on each (data.aiSummary).
query repo=a,b,cCombined subgraph for multiple repos (comma-separated keys).
query … --localSame commands against scans/latest (or HELIX_GRAPH_PATH); no AWS.
query … --scan-id <id>Pin to one READY scan (historical graph, pre-feature commit scan, etc.).
query … --workspace-id <id>Pin to LATEST READY for an ephemeral or alternate workspace.
bash
npx @igentify/helix-flowgraph query features
npx @igentify/helix-flowgraph query features --local
npx @igentify/helix-flowgraph query features --scan-id 01KX0JWPM83J
npx @igentify/helix-flowgraph query unbridged
npx @igentify/helix-flowgraph query repo=ng-access-service
npx @igentify/helix-flowgraph query repo=ng-access-service --scan-id 01KX0JWPM83J
npx @igentify/helix-flowgraph query repo=ng-access-service --local
npx @igentify/helix-flowgraph query repo=ng-access-service,ng-work-space-ui

Querying a previous scan or branch

A branch name is not a query parameter — scan the commit first, then query by scanId:

typescript
import { startScan, watchScan, queryFeatures, queryRepos } from "@igentify/helix-flowgraph";

// Scan pre-feature commit into an ephemeral workspace
const { scanId, workspaceId } = await startScan({
  workspaceId: "pre-feature-enrollments",
  repos: [{
    repoKey: "ng-access-service",
    fullName: "igentify/ng-access-service",
    commit: "abc123def456", // pre-feature SHA
  }],
});
await watchScan(scanId);

// Query that scan (not canonical LATEST)
const { features } = await queryFeatures({ scanId });
await queryRepos("ng-access-service", { scanId });

// Or: latest READY in that workspace only
await queryFeatures({ workspaceId });
bash
npx @igentify/helix-flowgraph scan list --workspace-id pre-feature-enrollments --completed
npx @igentify/helix-flowgraph query features --scan-id 01KX...

Scan commands

Start and monitor the ingest + AI pipeline (clone → AST → merge → AI enrichment → READY).

CommandWhat it does
list / scan listList workspace scans, newest first. Default: today only (local midnight → now). Response includes from / to bounds applied.
list --from <dt>Lower bound on startedAt (ISO 8601). --to defaults to now.
list --to <dt>Upper bound; --from defaults to start of that local calendar day.
list --from <dt> --to <dt>Explicit window (e.g. --from 2026-07-01 --to 2026-07-08).
list --completedSame, but only READY (successful) scans.
scan start --local --repo-path <path>Local ingest on a filesystem checkout. Writes scans/<scanId>/, updates scans/latest. No AWS. Bundled in npm package (no clone required).
scan start --repo <key>Start a single-repo rescan. Seeds merge inputs and AI artifacts from the latest READY scan for other repos, then re-runs workspace feature synthesis/insights/labels.
scan startScan the full workspace roster (all configured repos).
scan status <scanId>Current state: overall status, progressPercent (0–100), per-repo stage/status, branch, commit SHA, execution ARN.
scan watch <scanId>Poll until READY or FAILED; prints JSON on each change (includes progressPercent). Exit code 1 on failure.
scan cancel <scanId>Stop the Step Functions execution and mark the scan cancelled.
bash
npx @igentify/helix-flowgraph list
npx @igentify/helix-flowgraph list --from 2026-07-01
npx @igentify/helix-flowgraph list --completed
npx @igentify/helix-flowgraph scan start --repo ng-access-service
npx @igentify/helix-flowgraph scan start --local --repo-path ~/code/igentify/report-builder-service
npx @igentify/helix-flowgraph query repo=report-builder-service --local
npx @igentify/helix-flowgraph scan status 01JABC...
npx @igentify/helix-flowgraph scan watch 01JABC...
npx @igentify/helix-flowgraph scan cancel 01JABC...

Common options

OptionPurpose
--localLocal filesystem scan or in-process query (no AWS)
--scan-id <id>Query a specific READY scan
--workspace-id <id>Query LATEST READY for a workspace (cloud)
--repo-path <path>With scan start --local: local repository root
--profile <name>AWS profile for SSM API key lookup (cloud only)
--region <name>AWS region (default us-east-1)
--base-url <url>Override API base URL (cloud only)
--interval <ms>Poll interval for scan watch (default 5000)
--compactMinified JSON on stdout

Library — query

Typed helpers wrap the Query REST API. Request body schemas live in shared/src/queries.ts; each helper below maps to a route handler in backend/src/routes.ts.

typescript
import {
  queryFeatures,
  queryFeature,
  queryRepos,
  queryUnbridged,
  queryCompareFeatures,
  queryImplementationAnchor,
  queryEndpointQa,
  queryEndpointPotentialIssues,
  queryEndpointQaFe,
  queryEndpointPotentialIssuesFe,
  queryFeatureInsights,
  queryFeatureDisplayTitles,
  queryImpact,
  queryNode,
  queryHealth,
} from "@igentify/helix-flowgraph";

// Feature catalogue from latest READY scan
const { features, scanId } = await queryFeatures();
await queryFeatures({ local: true }); // scans/latest on disk
await queryFeatures({ scanId: "01KX…" }); // historical / branch scan
await queryFeatures({ workspaceId: "pre-feature-enrollments" });

// One feature neighbourhood
await queryFeature("feature:…");

// Endpoints missing a FE→BE bridge
const { endpoints, counts } = await queryUnbridged();

// Repo slice with AI summaries
await queryRepos("ng-access-service");
await queryRepos(["ng-access-service", "ng-work-space-ui"]);

// Shared vs unique nodes between two features
await queryCompareFeatures("feature:…", "feature:…");

// Heuristic “where to implement?” anchor lookup
await queryImplementationAnchor({ featureQuery: "searchUsers" });

// AI artifacts (lazy S3 read — 404 or `{ error }` when not generated yet)
await queryEndpointQa("repo:…|ApiEndpoint:…");
await queryEndpointPotentialIssues("repo:…|ApiEndpoint:…");
await queryEndpointQaFe("repo:…|ApiClientCall:…");
await queryEndpointPotentialIssuesFe("repo:…|ApiClientCall:…");
await queryFeatureInsights("feature:…");
await queryFeatureDisplayTitles();

// Graph utilities
await queryImpact("feature:…");
await queryNode("feature:…");

// Liveness
await queryHealth();

For routes without a named helper yet (/query/technical-graph inline delivery), use queryGraph("/query/…") (GET) or call the REST API directly (POST).

Verify exports after install:

bash
node -e "import('@igentify/helix-flowgraph').then(m=>console.log(typeof m.queryFeatureInsights))"
# expect: function

Library — scan

typescript
import {
  startScan,
  startLocalScan,
  listScans,
  getScanStatus,
  watchScan,
  cancelScan,
} from "@igentify/helix-flowgraph";

const { scans, from, to } = await listScans({ completed: true });
await listScans({ from: "2026-07-01T00:00:00Z", to: "2026-07-08T23:59:59Z" });

const { scanId } = await startScan({ repoKey: "ng-access-service" });

// Scan a specific commit (POST body — use library, not CLI --repo alone)
await startScan({
  workspaceId: "my-experiment",
  repos: [{ repoKey: "ng-access-service", fullName: "igentify/ng-access-service", commit: "abc123" }],
});

// Local filesystem scan (no AWS, no clone)
await startLocalScan({
  repoPaths: ["~/code/igentify/report-builder-service"],
});

await watchScan(scanId, {
  pollIntervalMs: 5000,
  onUpdate: (run) => console.log(run.status, run.repos),
});

const final = await getScanStatus(scanId);
await cancelScan(scanId); // while running

REST endpoint details: Query REST API.

Helix Flowgraph — Igentify