Builtin Library
README.md
procgen.searchNodes
Finds the nodes a graph is built from, by what they do: the procgen
counterpart of search_tools. A query is answered by meaning, through
ZeroMind's search over every published node: the builtin library, the
libraries this world installed and what every other world publishes. A node
is found from the words someone looking for it would use ("parent parts under
other parts", "scatter points on a surface"), whether this world holds it or
not. Each node states what it is for in its own description and README, and
that is what the search reads.
The rows come in ZeroMind's order. This world's own nodes that the ranking
does not hold yet (a node not pushed, or a node of a private world) follow the
ranked rows, matched by their words and marked from = "world": they are part
of this world's project.
A query asks ZeroMind, so it needs a live session. On an engine started with
no world bound, a query is refused, saying so: start the engine bound to a
world to search. A query is answered over .procNode assets and .procPack
assets, the kinds ZeroMind indexes. A pack is found by what its README says its
ops do, and a hit that is a pack is listed as the ops of that pack that answer
the query's words (op.<id> rows, kind = "op", matched.pack naming the
pack), or as the pack itself (kind = "procPack") when none of its ops does:
its use lists its ops, or, for a pack this world does not hold, is the read of
its files, with the install call beside it.
With no query it lists every node this engine holds, the ops of its packs
included, and catalogue names every family with the nodes in it, small
enough to read whole. The listing reads this engine alone, so it answers on
any engine.
Each row's name is the name a graph calls it by: points.grid is
g.points.grid(...), op.transfer.upload is g.op.transfer.upload(...). No two rows
carry one name. A row carries the first sentence of the node's description as
summary; detail = true adds the whole description. matched.semantic is
the row's rank in ZeroMind's ranking; a row marked from = "world" carries
how its files carry the query's words (matched.role, matched.file, and
matched.terms, how many of the words). A node this world does not hold
carries installed = false, use, the zm ls-tree @<guid> read of its files
in the shell, and install, the zeromind_install call for the one reading
showed fits.
A row of a .procNode built with g:node (the procNodes/ of the procgen
package) carries callable = false: a graph built with proc.define does not
call it, and g.op.<name> of it is refused where it is written. Only a
proc.graph graph calls it, through g:node. supersededBy names the node
written in the call form that a graph calls in its place (points.grid for
the procNodes/pointsGrid.procNode row).
Each row's context, pulls and pushes are what the node states: a node
written as a table states them in its source, and a node written with
proc.define in its .metadata or, for every node it holds, its nodebox's
.metadata.
Options: family, limit (default 10: that many ranked rows, then up to that
many of this world's own after them), context (sim, field, ...),
pulls / pushes ("scene" or "asset"), pack and detail. An option it
does not take is refused, naming the ones it does.
procgen.describeNode describes one node in full, by the name a row carries.
Part of procgen.toolbox; surfaces as procgen.searchNodes. Returns
{ results, count, catalogue?, total?, semantic? }: semantic says how the
search ran. When ZeroMind did not answer, its status says so
(unavailable, or resting with retry_in_s), its error says why, and
the rows are this world's own nodes, matched by their words. A listing
carries catalogue and total, how many nodes it holds before limit.