Fen source API

Exported Fennel surfaces discovered from source, grouped by namespace. Inline @doc blocks provide summaries and signatures where present.

Core (fen.core.*)

fen.core.agent

Module neighborhood graph: DOT · SVG

fen.core.agent module graph

fen.core.agent.make-agent

(make-agent {:provider-name :model :system :tools :api-key :on-event :max-tokens :convert-to-llm :provider-options}) -> Agent

Construct an Agent record with empty messages, ready for repeated step calls. :api-key and :max-tokens are auto-injected into provider-options. :convert-to-llm projects custom AgentMessages onto canonical Messages before each provider call.

tags: agent, loop

packages/core/src/fen/core/agent.fnl:43

fen.core.agent.step

(step agent user-msg ?cancel-fn ?step-opts)

Run one user turn through the loop. Appends a UserMessage, then iterates

packages/core/src/fen/core/agent.fnl:670

fen.core.agent.SAFETY-CAP

number

Hard ceiling on tool-call iterations per step. Bump if a real workflow needs more, don't remove.

tags: agent, loop, limits

packages/core/src/fen/core/agent.fnl:13

fen.core.agent.complete-messages

(complete-messages agent messages ?model ?opts ?on-event ?yield-fn)

Run one provider completion against explicit canonical messages and no

packages/core/src/fen/core/agent.fnl:566

fen.core.diagnostics

Module neighborhood graph: DOT · SVG

fen.core.diagnostics module graph

fen.core.diagnostics.set-runtime-info!

(set-runtime-info! info)

Inject sanitized runtime/build metadata for later diagnostics.

packages/core/src/fen/core/diagnostics.fnl:29

fen.core.diagnostics.runtime-info

(runtime-info)

Return sanitized runtime/build metadata, or nil if unavailable.

packages/core/src/fen/core/diagnostics.fnl:34

fen.core.extensions.build

Module neighborhood graph: DOT · SVG

fen.core.extensions.build module graph

fen.core.extensions.build.workspace-output-path

(workspace-output-path src) -> string

Map a workspace source path to its in-tree dist/ output, handling both rock-shaped src/ trees and flat-layout extensions.

tags: extensions, build

packages/core/src/fen/core/extensions/build.fnl:85

fen.core.extensions.build.lrbuild-output-path

(lrbuild-output-path src) -> string

Map a source path to its per-rock .lrbuild/ output, used when a single rockspec is built in place.

tags: extensions, build

packages/core/src/fen/core/extensions/build.fnl:109

fen.core.extensions.build.compile-file

(compile-file src output-path) -> nil

Compile a single Fennel source file to Lua and write it to the path returned by output-path.

tags: extensions, build

packages/core/src/fen/core/extensions/build.fnl:121

fen.core.extensions.build.build-files

(build-files files output-path) -> boolean

Compile a list of source files with the given output-path mapper, printing each failure and returning whether all succeeded.

tags: extensions, build

packages/core/src/fen/core/extensions/build.fnl:132

fen.core.extensions.build.workspace-find

packages/core/src/fen/core/extensions/build.fnl:147

fen.core.extensions.build.lrbuild-find

packages/core/src/fen/core/extensions/build.fnl:154

fen.core.extensions.build.generate-bundled-skills-data

(generate-bundled-skills-data out ?root) -> nil

Emit an embeddable Lua data module from real bundled SKILL.md sources, skipping silently when the bundled root is absent.

tags: extensions, build

packages/core/src/fen/core/extensions/build.fnl:160

fen.core.extensions.build.build-lrbuild-dir

(build-lrbuild-dir)

Rebuild the current directory's .lrbuild/ tree from its Fennel sources.

packages/core/src/fen/core/extensions/build.fnl:184

fen.core.extensions.events

Module neighborhood graph: DOT · SVG

fen.core.extensions.events module graph

fen.core.extensions.events.error-log-path

(error-log-path) -> string

Lazily compute and return the JSONL file path where extension event-bus failures are persisted.

tags: extensions, events, diagnostics

packages/core/src/fen/core/extensions/events.fnl:27

fen.core.extensions.events.list-errors

(list-errors) -> [ExtensionError]

Return the bounded in-memory list of sanitized extension error records captured by the event bus.

tags: extensions, events, diagnostics

packages/core/src/fen/core/extensions/events.fnl:73

fen.core.extensions.events.emit

(emit ev)

Dispatch ev to handlers[ev.type] and the :* wildcard bucket.

packages/core/src/fen/core/extensions/events.fnl:121

fen.core.extensions.events.on

(on event-name handler ?owner)

Subscribe handler to event-name. Returns unsubscribe function.

packages/core/src/fen/core/extensions/events.fnl:134

fen.core.extensions.events.unregister-by-owner

(unregister-by-owner owner) -> nil

Remove every event handler tagged with owner from all event buckets during extension reload or teardown.

tags: extensions, events, reload

packages/core/src/fen/core/extensions/events.fnl:140

fen.core.extensions.events.list

(list) -> table

Return a safe introspection table of subscribed event names and handler owners without exposing handler functions.

tags: extensions, events, introspection

packages/core/src/fen/core/extensions/events.fnl:149

fen.core.extensions.input

Module neighborhood graph: DOT · SVG

fen.core.extensions.input module graph

fen.core.extensions.input.handle

(handle input ctx) -> action

Dispatch non-slash user input through the ordered input-handler pipeline.

tags: extensions, input, dispatch

packages/core/src/fen/core/extensions/input.fnl:7

fen.core.extensions.loader

Module neighborhood graph: DOT · SVG

fen.core.extensions.loader module graph

fen.core.extensions.loader.load-sibling

(load-sibling spec sibling)

Load a sibling file relative to spec.dir. Used by (api.load :name) from

packages/core/src/fen/core/extensions/loader/init.fnl:213

fen.core.extensions.loader.load!

(load! opts ?mode)

Discover and load every admissible extension. First-party extensions

packages/core/src/fen/core/extensions/loader/init.fnl:240

fen.core.extensions.loader.summarize

(summarize items) -> ExtensionLoadSummary

Fold per-extension load entries into aggregate loaded/changed/failed counters plus the original extension list.

tags: extensions, loader, diagnostics

packages/core/src/fen/core/extensions/loader/init.fnl:273

fen.core.extensions.loader.reload-extension!

(reload-extension! name) -> ok?, err

Reload a previously loaded extension by name using its retained spec and interactive TUI reload mode.

tags: extensions, loader, reload

packages/core/src/fen/core/extensions/loader/init.fnl:290

fen.core.extensions.loader.compiler

Module neighborhood graph: DOT · SVG

fen.core.extensions.loader.compiler module graph

fen.core.extensions.loader.compiler.compile!

(compile! candidates ?yield!)

Candidates are ordered {:module :path} records. Unsupported when this

packages/core/src/fen/core/extensions/loader/compiler.fnl:55

fen.core.extensions.loader.discover

Module neighborhood graph: DOT · SVG

fen.core.extensions.loader.discover module graph

fen.core.extensions.loader.discover.discover

(discover explicit-paths ?yield-fn)

Return the merged spec list in load priority: explicit overrides trusted

packages/core/src/fen/core/extensions/loader/discover/init.fnl:40

fen.core.extensions.loader.discover.backends.posix

Module neighborhood graph: DOT · SVG

fen.core.extensions.loader.discover.backends.posix module graph

fen.core.extensions.loader.discover.backends.posix.first-party-roots

(first-party-roots)

Return trusted flat first-party overlay roots.

packages/core/src/fen/core/extensions/loader/discover/backends/posix.fnl:103

fen.core.extensions.loader.discover.backends.posix.project-roots

(project-roots)

Project-local roots: .fen/extensions in cwd and ancestors, walking upward

packages/core/src/fen/core/extensions/loader/discover/backends/posix.fnl:113

fen.core.extensions.loader.discover.backends.posix.user-roots

(user-roots)

Roots that contain user-installed extensions: $FEN_EXTENSIONS_PATH (colon-

packages/core/src/fen/core/extensions/loader/discover/backends/posix.fnl:133

fen.core.extensions.loader.discover.backends.posix.enumerate

(enumerate explicit-paths ?yield-fn)

Assemble the extension spec list from explicit paths and the filesystem/env

packages/core/src/fen/core/extensions/loader/discover/backends/posix.fnl:251

fen.core.extensions.loader.manifest

Module neighborhood graph: DOT · SVG

fen.core.extensions.loader.manifest module graph

fen.core.extensions.loader.manifest.strip-ext

[name]

packages/core/src/fen/core/extensions/loader/manifest.fnl:7

fen.core.extensions.loader.manifest.load-file

(load-file file-path)

Run a .fnl/.lua file as a script and return its return value (or nil + err).

packages/core/src/fen/core/extensions/loader/manifest.fnl:22

fen.core.extensions.loader.manifest.manifest-path

[dir]

packages/core/src/fen/core/extensions/loader/manifest.fnl:28

fen.core.extensions.loader.manifest.entry-path-for-dir

[dir]

packages/core/src/fen/core/extensions/loader/manifest.fnl:35

fen.core.extensions.loader.manifest.read-manifest

[file-path]

packages/core/src/fen/core/extensions/loader/manifest.fnl:42

fen.core.extensions.loader.manifest.entry-module-of

[manifest]

packages/core/src/fen/core/extensions/loader/manifest.fnl:48

fen.core.extensions.loader.manifest.entry-of

[manifest]

packages/core/src/fen/core/extensions/loader/manifest.fnl:51

fen.core.extensions.loader.manifest.interactive-only?

[manifest]

packages/core/src/fen/core/extensions/loader/manifest.fnl:54

fen.core.extensions.loader.manifest.presenter-of

[manifest]

packages/core/src/fen/core/extensions/loader/manifest.fnl:57

fen.core.extensions.loader.manifest.reload-modules

[manifest fallback]

packages/core/src/fen/core/extensions/loader/manifest.fnl:60

fen.core.extensions.loader.manifest.reload-exclude

[manifest]

packages/core/src/fen/core/extensions/loader/manifest.fnl:63

fen.core.extensions.loader.manifest.enabled?

(enabled? spec ?setting)

Return (enabled? reason). Explicit --extension always loads; a boolean

packages/core/src/fen/core/extensions/loader/manifest.fnl:66

fen.core.extensions.loader.manifest.entry-register

(entry-register entry)

Return the register fn from an extension entry: the entry itself when it is

packages/core/src/fen/core/extensions/loader/manifest.fnl:78

fen.core.extensions.loader.manifest.requires-modules

[manifest]

packages/core/src/fen/core/extensions/loader/manifest.fnl:85

fen.core.extensions.loader.manifest.requires-shared-libs

[manifest]

packages/core/src/fen/core/extensions/loader/manifest.fnl:88

fen.core.extensions.loader.manifest.missing-requires-modules

(missing-requires-modules manifest)

Return all manifest-declared Lua modules that cannot be required.

packages/core/src/fen/core/extensions/loader/manifest.fnl:91

fen.core.extensions.loader.reload

Module neighborhood graph: DOT · SVG

fen.core.extensions.loader.reload module graph

fen.core.extensions.loader.reload.file-changed?!

(file-changed?! file-path) -> boolean

Update and compare the cached fingerprint for a path-shaped extension file, returning true only after a prior baseline changed.

tags: extensions, loader, reload, fingerprint

packages/core/src/fen/core/extensions/loader/reload.fnl:51

fen.core.extensions.loader.reload.change-summary

(change-summary mods)

Probe each module for a fingerprint change, updating the cache. Returns a

packages/core/src/fen/core/extensions/loader/reload.fnl:60

fen.core.extensions.loader.reload.clear-reload-modules!

(clear-reload-modules! manifest fallback ?yield ?opts)

Reload manifest.reload-modules (or fallback) from the first changed

packages/core/src/fen/core/extensions/loader/reload.fnl:130

fen.core.extensions.loader.reload.core-modules

(core-modules)

Derive the reloadable core set from package.loaded instead of a hand-kept

packages/core/src/fen/core/extensions/loader/reload.fnl:176

fen.core.extensions.loader.reload.snapshot-core!

(snapshot-core!) -> nil

Baseline fingerprints for the currently-loaded core modules so the first /reload after startup reports only real changes.

tags: extensions, loader, reload, fingerprint

packages/core/src/fen/core/extensions/loader/reload.fnl:187

fen.core.extensions.loader.reload.reload-core!

(reload-core! ?yield ?opts) -> (ok-count [failure] ReloadCoreSummary)

Skip recompilation when no core source changed; otherwise reload all currently-loaded core modules in place to refresh captured dependencies, yielding periodically and returning counts plus failures.

tags: extensions, loader, reload

packages/core/src/fen/core/extensions/loader/reload.fnl:196

fen.core.extensions.logs

Module neighborhood graph: DOT · SVG

fen.core.extensions.logs module graph

fen.core.extensions.logs.record!

(record! owner level value) -> LogRecord|nil

For enabled levels, sanitize and retain one owner-tagged extension log record, append it to logs.jsonl, and mirror it through fen.util.log; disabled levels avoid all record construction and file I/O.

tags: extensions, logs, diagnostics

packages/core/src/fen/core/extensions/logs.fnl:42

fen.core.extensions.logs.list

(list) -> [LogRecord]

Return the bounded persistent extension log ring for structured introspection.

tags: extensions, logs, introspection

packages/core/src/fen/core/extensions/logs.fnl:61

fen.core.extensions.register

Module neighborhood graph: DOT · SVG

fen.core.extensions.register module graph

fen.core.extensions.register.public-register-kind?

(public-register-kind? kind) -> boolean

Return true when kind may be registered by unprivileged extension APIs.

tags: extensions, register, dispatcher

packages/core/src/fen/core/extensions/register/init.fnl:91

fen.core.extensions.register.register

(register kind spec owner) -> register-result

Dispatch one extension contribution to the per-kind registry module and return its owner-tagged unregister handle.

tags: extensions, register, dispatcher

packages/core/src/fen/core/extensions/register/init.fnl:100

fen.core.extensions.register.unregister-by-owner

(unregister-by-owner owner)

Drop every registration tagged with owner.

packages/core/src/fen/core/extensions/register/init.fnl:111

fen.core.extensions.register.list

(list kind) -> frozen-table

Return a frozen introspection list for the requested registry kind, including extensions, hooks, event handlers, and prompt fragments.

tags: extensions, register, introspection

packages/core/src/fen/core/extensions/register/init.fnl:161

fen.core.extensions.register.list-raw

(list-raw kind)

Non-frozen variant of list for the presenter paint hot path. Cacheable

packages/core/src/fen/core/extensions/register/init.fnl:175

fen.core.extensions.register.collect-introspection

(collect-introspection ?owner ?ctx) -> table

Evaluate registered introspection snapshots through the centralized pcall-isolated collector.

tags: extensions, register, introspection, snapshots

packages/core/src/fen/core/extensions/register/init.fnl:187

fen.core.extensions.register.list-actions

[]

packages/core/src/fen/core/extensions/register/init.fnl:196

fen.core.extensions.register.invoke-action

[owner name args ctx]

packages/core/src/fen/core/extensions/register/init.fnl:199

fen.core.extensions.register.action

Module neighborhood graph: DOT · SVG

fen.core.extensions.register.action module graph

fen.core.extensions.register.action.register

[spec owner handle-result]

packages/core/src/fen/core/extensions/register/action.fnl:17

fen.core.extensions.register.action.unregister-by-owner

[owner]

packages/core/src/fen/core/extensions/register/action.fnl:33

fen.core.extensions.register.action.list

(list)

Return harness-safe descriptors without executable callbacks.

packages/core/src/fen/core/extensions/register/action.fnl:45

fen.core.extensions.register.action.invoke

(invoke owner name args ctx)

Validate arguments and invoke an action, always returning a structured result.

packages/core/src/fen/core/extensions/register/action.fnl:71

fen.core.extensions.register.auth_backend

Module neighborhood graph: DOT · SVG

fen.core.extensions.register.auth_backend module graph

fen.core.extensions.register.auth_backend.register

(register spec owner handle-result) -> register-result

Validate and install a singleton auth-backend contribution keyed by :name for provider credential lookup.

tags: extensions, register, auth

packages/core/src/fen/core/extensions/register/auth_backend.fnl:6

fen.core.extensions.register.auth_backend.unregister-by-owner

(unregister-by-owner owner) -> nil

Remove every auth backend installed by owner without disturbing backends registered by other extensions.

tags: extensions, register, auth, reload

packages/core/src/fen/core/extensions/register/auth_backend.fnl:18

fen.core.extensions.register.auth_backend.find

(find name) -> AuthBackend|nil

Return the registered auth backend for name, or nil when no matching backend is installed.

tags: extensions, register, auth

packages/core/src/fen/core/extensions/register/auth_backend.fnl:28

fen.core.extensions.register.auth_backend.list

(list) -> [AuthBackendInfo]

Return auth backend metadata for introspection, including owner and optional credential capability flags.

tags: extensions, register, auth, introspection

packages/core/src/fen/core/extensions/register/auth_backend.fnl:36

fen.core.extensions.register.command

Module neighborhood graph: DOT · SVG

fen.core.extensions.register.command module graph

fen.core.extensions.register.command.register

(register spec owner handle-result) -> register-result

Validate and install a slash-command contribution keyed by :name with its handler and command metadata.

tags: extensions, register, commands

packages/core/src/fen/core/extensions/register/command.fnl:7

fen.core.extensions.register.command.unregister-by-owner

(unregister-by-owner owner) -> nil

Remove all slash commands installed by owner so extension reloads replace commands without stale aliases.

tags: extensions, register, commands, reload

packages/core/src/fen/core/extensions/register/command.fnl:22

fen.core.extensions.register.command.dispatch

(dispatch line caller-state)

Look up and pcall-isolate a registered slash command.

packages/core/src/fen/core/extensions/register/command.fnl:49

fen.core.extensions.register.command.list

(list) -> [CommandInfo]

Return command metadata used by help, docs, and diagnostics without exposing handler functions.

tags: extensions, commands, introspection

packages/core/src/fen/core/extensions/register/command.fnl:69

fen.core.extensions.register.command.arg-completions

(arg-completions name arg-prefix ctx)

Return argument-completion choices for command name.

packages/core/src/fen/core/extensions/register/command.fnl:106

fen.core.extensions.register.contribution

Module neighborhood graph: DOT · SVG

fen.core.extensions.register.contribution module graph

fen.core.extensions.register.contribution.by-order

[a b]

packages/core/src/fen/core/extensions/register/contribution.fnl:7

fen.core.extensions.register.contribution.register

(register opts spec owner handle-result) -> register-result

Validate, default, and append one owner-tagged array contribution.

tags: extensions, register, contribution

packages/core/src/fen/core/extensions/register/contribution.fnl:30

fen.core.extensions.register.contribution.unregister-by-owner

(unregister-by-owner opts owner) -> nil

Remove all contributions tagged with owner from an array registry bucket.

tags: extensions, register, contribution, reload

packages/core/src/fen/core/extensions/register/contribution.fnl:45

fen.core.extensions.register.contribution.list

(list opts) -> table

Return introspection records copied from an owner-tagged array registry bucket.

tags: extensions, register, contribution, introspection

packages/core/src/fen/core/extensions/register/contribution.fnl:53

fen.core.extensions.register.control

Module neighborhood graph: DOT · SVG

fen.core.extensions.register.control module graph

fen.core.extensions.register.control.register

(register spec owner handle-result) -> register-result

Validate and append a presenter-neutral control contribution with owner tagging for reload cleanup.

tags: extensions, register, controls

packages/core/src/fen/core/extensions/register/control.fnl:10

fen.core.extensions.register.control.unregister-by-owner

(unregister-by-owner owner) -> nil

Remove all control contributions installed by owner from the ordered controls registry.

tags: extensions, register, controls, reload

packages/core/src/fen/core/extensions/register/control.fnl:18

fen.core.extensions.register.control.list

(list) -> [ControlInfo]

Return control metadata for presenters and docs, including keys/order while hiding mutable registry records.

tags: extensions, controls, introspection

packages/core/src/fen/core/extensions/register/control.fnl:26

fen.core.extensions.register.hook

Module neighborhood graph: DOT · SVG

fen.core.extensions.register.hook module graph

fen.core.extensions.register.hook.register

(register spec owner handle-result) -> register-result

Validate and append a before-tool hook contribution that can inspect or veto pending tool execution.

tags: extensions, register, hooks, tools

packages/core/src/fen/core/extensions/register/hook.fnl:7

fen.core.extensions.register.hook.unregister-by-owner

(unregister-by-owner owner) -> nil

Remove all before-tool hooks installed by owner during extension reload or teardown.

tags: extensions, hooks, reload

packages/core/src/fen/core/extensions/register/hook.fnl:19

fen.core.extensions.register.hook.list

(list) -> [HookInfo]

Return hook contributions without exposing hook functions.

tags: extensions, hooks, introspection

packages/core/src/fen/core/extensions/register/hook.fnl:27

fen.core.extensions.register.hook.run-before-tool

(run-before-tool ctx)

Run all hooks in deterministic registration order until one blocks.

packages/core/src/fen/core/extensions/register/hook.fnl:38

fen.core.extensions.register.input

Module neighborhood graph: DOT · SVG

fen.core.extensions.register.input module graph

fen.core.extensions.register.input.register

(register spec owner handle-result) -> register-result

Validate and append an ordered input handler contribution consulted before non-slash user input starts a turn.

tags: extensions, register, input

packages/core/src/fen/core/extensions/register/input.fnl:14

fen.core.extensions.register.input.unregister-by-owner

(unregister-by-owner owner) -> nil

Remove all input handlers installed by owner during extension reload or teardown.

tags: extensions, register, input, reload

packages/core/src/fen/core/extensions/register/input.fnl:29

fen.core.extensions.register.input.list

(list) -> [InputHandlerInfo]

Return input handlers sorted by order/owner/name without exposing handler functions.

tags: extensions, input, introspection

packages/core/src/fen/core/extensions/register/input.fnl:52

fen.core.extensions.register.input.handle

(handle input ctx)

Dispatch input through registered handlers in ascending :order.

packages/core/src/fen/core/extensions/register/input.fnl:63

fen.core.extensions.register.introspect

Module neighborhood graph: DOT · SVG

fen.core.extensions.register.introspect module graph

fen.core.extensions.register.introspect.register

[spec owner handle-result]

packages/core/src/fen/core/extensions/register/introspect.fnl:15

fen.core.extensions.register.introspect.unregister-by-owner

[owner]

packages/core/src/fen/core/extensions/register/introspect.fnl:25

fen.core.extensions.register.introspect.list

[]

packages/core/src/fen/core/extensions/register/introspect.fnl:37

fen.core.extensions.register.introspect.collect

(collect ?owner ?ctx)

Return owner-scoped snapshot outputs. If owner is supplied, only collect

packages/core/src/fen/core/extensions/register/introspect.fnl:82

fen.core.extensions.register.panel

Module neighborhood graph: DOT · SVG

fen.core.extensions.register.panel module graph

fen.core.extensions.register.panel.register

(register spec owner handle-result) -> register-result

Validate a panel contribution, fill default placement/order fields, and append it to the presenter panel registry.

tags: extensions, register, panels, ui

packages/core/src/fen/core/extensions/register/panel.fnl:27

fen.core.extensions.register.panel.unregister-by-owner

(unregister-by-owner owner) -> nil

Remove all panel contributions installed by owner while preserving the shared panel registry table identity.

tags: extensions, panels, reload

packages/core/src/fen/core/extensions/register/panel.fnl:35

fen.core.extensions.register.panel.list

(list) -> [Panel]

Return panel contributions sorted by order, owner, and name for deterministic presenter layout.

tags: extensions, panels, introspection

packages/core/src/fen/core/extensions/register/panel.fnl:43

fen.core.extensions.register.presenter

Module neighborhood graph: DOT · SVG

fen.core.extensions.register.presenter module graph

fen.core.extensions.register.presenter.promote-ui-slot!

(promote-ui-slot!)

Select the ui table from the first active presenter that supplies one.

packages/core/src/fen/core/extensions/register/presenter.fnl:8

fen.core.extensions.register.presenter.active-presenter

(active-presenter)

Return the first active presenter record, or nil.

packages/core/src/fen/core/extensions/register/presenter.fnl:15

fen.core.extensions.register.presenter.register

(register spec owner handle-result) -> register-result

Validate and append a presenter contribution, promoting its UI slot immediately when it is active.

tags: extensions, register, presenter, ui

packages/core/src/fen/core/extensions/register/presenter.fnl:23

fen.core.extensions.register.presenter.unregister-by-owner

(unregister-by-owner owner) -> nil

Remove presenters installed by owner and promote the next active UI slot so extension APIs keep working after reload.

tags: extensions, presenter, reload

packages/core/src/fen/core/extensions/register/presenter.fnl:40

fen.core.extensions.register.presenter.init-active-presenter

(init-active-presenter ctx) -> ok?, result

Call the active presenter's optional :init lifecycle method through a pcall-style result pair.

tags: extensions, presenter, lifecycle

packages/core/src/fen/core/extensions/register/presenter.fnl:63

fen.core.extensions.register.presenter.shutdown-active-presenter

(shutdown-active-presenter ctx) -> ok?, result

Call the active presenter's optional :shutdown lifecycle method during process teardown.

tags: extensions, presenter, lifecycle

packages/core/src/fen/core/extensions/register/presenter.fnl:71

fen.core.extensions.register.presenter.run-active-presenter

(run-active-presenter ctx) -> ok?, result

Call the active presenter's required :run lifecycle method and report an error pair when no runnable presenter exists.

tags: extensions, presenter, lifecycle

packages/core/src/fen/core/extensions/register/presenter.fnl:79

fen.core.extensions.register.presenter.build-ui-slot

(build-ui-slot) -> table

Build the stable extension-facing UI facade whose methods dispatch to the active presenter or lightweight fallbacks.

tags: extensions, presenter, ui, api

packages/core/src/fen/core/extensions/register/presenter.fnl:110

fen.core.extensions.register.presenter.list

(list) -> [PresenterInfo]

Return presenter metadata and lifecycle capability flags for diagnostics and runtime docs.

tags: extensions, presenter, introspection

packages/core/src/fen/core/extensions/register/presenter.fnl:121

fen.core.extensions.register.prompt

Module neighborhood graph: DOT · SVG

fen.core.extensions.register.prompt module graph

fen.core.extensions.register.prompt.contribute

(contribute text-or-fn ?opts owner handle-result) -> register-result

Append an ordered system-prompt fragment from api.prompt, tagging owner metadata and returning an unregister handle.

tags: extensions, prompt, register

packages/core/src/fen/core/extensions/register/prompt.fnl:17

fen.core.extensions.register.prompt.unregister-by-owner

(unregister-by-owner owner) -> nil

Remove all system-prompt fragments contributed by owner during reload or extension teardown.

tags: extensions, prompt, reload

packages/core/src/fen/core/extensions/register/prompt.fnl:38

fen.core.extensions.register.prompt.render

(render ?ctx)

Render all registered prompt fragments in numeric order. Fragment functions

packages/core/src/fen/core/extensions/register/prompt.fnl:66

fen.core.extensions.register.prompt.stats

(stats ?ctx)

Return per-fragment rendered-size metadata in final render order. Each entry

packages/core/src/fen/core/extensions/register/prompt.fnl:78

fen.core.extensions.register.prompt.list

(list)

Return prompt fragments in final render order.

packages/core/src/fen/core/extensions/register/prompt.fnl:114

fen.core.extensions.register.provider

Module neighborhood graph: DOT · SVG

fen.core.extensions.register.provider module graph

fen.core.extensions.register.provider.register

(register spec owner handle-result) -> register-result

Validate and install a singleton provider contribution keyed by name, defaulting name from api when omitted.

tags: extensions, register, providers

packages/core/src/fen/core/extensions/register/provider.fnl:6

fen.core.extensions.register.provider.unregister-by-owner

(unregister-by-owner owner) -> nil

Remove every provider installed by owner without clobbering same-name providers registered later by other owners.

tags: extensions, providers, reload

packages/core/src/fen/core/extensions/register/provider.fnl:23

fen.core.extensions.register.provider.find

(find name)

Find a provider by its unique registry name. Provider :api is protocol

packages/core/src/fen/core/extensions/register/provider.fnl:33

fen.core.extensions.register.provider.list

(list) -> [ProviderInfo]

Return provider metadata for model selection, docs, and diagnostics while preserving provider implementation records internally.

tags: extensions, providers, introspection

packages/core/src/fen/core/extensions/register/provider.fnl:38

fen.core.extensions.register.session_backend

Module neighborhood graph: DOT · SVG

fen.core.extensions.register.session_backend module graph

fen.core.extensions.register.session_backend.register

(register spec owner handle-result) -> register-result

Validate required session backend methods and install the backend by name for session persistence selection.

tags: extensions, register, session

packages/core/src/fen/core/extensions/register/session_backend.fnl:10

fen.core.extensions.register.session_backend.unregister-by-owner

(unregister-by-owner owner) -> nil

Remove session backends installed by owner and clear active session state if the active backend is removed.

tags: extensions, session, reload

packages/core/src/fen/core/extensions/register/session_backend.fnl:26

fen.core.extensions.register.session_backend.find

(find name) -> SessionBackend|nil

Return the registered session backend for name, or nil when no backend is installed under that name.

tags: extensions, session, lookup

packages/core/src/fen/core/extensions/register/session_backend.fnl:39

fen.core.extensions.register.session_backend.set-active!

(set-active! name) -> SessionBackend|nil

Record the active session backend name, resolve it immediately, and return the selected backend if present.

tags: extensions, session, state

packages/core/src/fen/core/extensions/register/session_backend.fnl:47

fen.core.extensions.register.session_backend.active

(active) -> SessionBackend|nil

Return the cached active backend or resolve the active backend name after reload restored the registry.

tags: extensions, session, state

packages/core/src/fen/core/extensions/register/session_backend.fnl:57

fen.core.extensions.register.session_backend.set-info!

(set-info! info ?handle) -> info

Store active session metadata and, when supplied, its backend handle for extension-owned state entries.

tags: extensions, session, introspection, state

packages/core/src/fen/core/extensions/register/session_backend.fnl:66

fen.core.extensions.register.session_backend.append-extension-state!

(append-extension-state! extension state ?version) -> entry|nil

Append JSON-friendly state owned by one extension to the active session when the backend supports generic entries.

tags: extensions, session, state, persistence

packages/core/src/fen/core/extensions/register/session_backend.fnl:96

fen.core.extensions.register.session_backend.latest-extension-state

(latest-extension-state extension ?yield-fn ?accept) -> state,entry|nil

Return the latest valid state and entry owned by one extension in the active session.

tags: extensions, session, state, replay

packages/core/src/fen/core/extensions/register/session_backend.fnl:117

fen.core.extensions.register.session_backend.info

(info) -> SessionInfo|nil

Return the cached active session info record without touching backend storage.

tags: extensions, session, introspection

packages/core/src/fen/core/extensions/register/session_backend.fnl:130

fen.core.extensions.register.session_backend.list

(list) -> [SessionBackendInfo]

Return session backend names and owners for diagnostics and generated runtime documentation.

tags: extensions, session, introspection

packages/core/src/fen/core/extensions/register/session_backend.fnl:137

fen.core.extensions.register.status

Module neighborhood graph: DOT · SVG

fen.core.extensions.register.status module graph

fen.core.extensions.register.status.register

(register spec owner handle-result) -> register-result

Validate a status-line contributor, fill default side/order fields, and append it to the status registry.

tags: extensions, register, status

packages/core/src/fen/core/extensions/register/status.fnl:24

fen.core.extensions.register.status.unregister-by-owner

(unregister-by-owner owner) -> nil

Remove all status contributors installed by owner while preserving contributors from other extensions.

tags: extensions, register, status, reload

packages/core/src/fen/core/extensions/register/status.fnl:32

fen.core.extensions.register.status.list

(list) -> [StatusItem]

Return status contributors sorted by order, owner, and name for deterministic presenter rendering.

tags: extensions, status, introspection

packages/core/src/fen/core/extensions/register/status.fnl:40

fen.core.extensions.register.tool

Module neighborhood graph: DOT · SVG

fen.core.extensions.register.tool module graph

fen.core.extensions.register.tool.register

(register spec owner handle-result) -> register-result

Validate and append an AgentTool contribution so the agent can expose it to providers and execute ToolCalls by name.

tags: extensions, register, tools

packages/core/src/fen/core/extensions/register/tool.fnl:8

fen.core.extensions.register.tool.unregister-by-owner

(unregister-by-owner owner) -> nil

Remove every tool contribution installed by owner from the extension tool registry.

tags: extensions, register, tools, reload

packages/core/src/fen/core/extensions/register/tool.fnl:29

fen.core.extensions.register.tool.merged

(merged base)

Return base ++ extension-contributed tools.

packages/core/src/fen/core/extensions/register/tool.fnl:37

fen.core.extensions.register.tool.list

(list) -> [ToolInfo]

Return lightweight tool metadata for docs and diagnostics without exposing execute functions.

tags: extensions, tools, introspection

packages/core/src/fen/core/extensions/register/tool.fnl:45

fen.core.extensions.rocks

Module neighborhood graph: DOT · SVG

fen.core.extensions.rocks module graph

fen.core.extensions.rocks.default-tree

(default-tree) -> string

Return the fen-managed LuaRocks tree, honoring FEN_ROCKS_TREE before falling back to the user data directory.

tags: extensions, rocks, paths

packages/core/src/fen/core/extensions/rocks.fnl:7

fen.core.extensions.rocks.lua-path-fragment

(lua-path-fragment tree) -> string

Build the package.path fragment that exposes pure-Lua modules installed in a fen rocks tree.

tags: extensions, rocks, paths

packages/core/src/fen/core/extensions/rocks.fnl:18

fen.core.extensions.rocks.lua-cpath-fragment

(lua-cpath-fragment tree) -> string

Build the package.cpath fragment that exposes native Lua 5.4 modules installed in a fen rocks tree.

tags: extensions, rocks, paths

packages/core/src/fen/core/extensions/rocks.fnl:26

fen.core.extensions.rocks.prepend-tree!

(prepend-tree! ?tree)

Prepend a rocks tree to package.path/package.cpath when the tree exists.

packages/core/src/fen/core/extensions/rocks.fnl:39

fen.core.extensions.rocks.rockspecs

(rockspecs dir) -> [string]

List top-level .rockspec files in an extension directory for build and missing-dependency diagnostics.

tags: extensions, rocks, build

packages/core/src/fen/core/extensions/rocks.fnl:58

fen.core.extensions.rocks.rockspec-present?

(rockspec-present? dir) -> boolean

Return true when an extension directory contains at least one rockspec for fen ext build guidance.

tags: extensions, rocks, build

packages/core/src/fen/core/extensions/rocks.fnl:68

fen.core.extensions.rocks.single-rockspec

(single-rockspec dir) -> rockspec|nil, err|nil

Require exactly one rockspec in an extension directory and return a user-facing error when zero or multiple are present.

tags: extensions, rocks, build

packages/core/src/fen/core/extensions/rocks.fnl:76

fen.core.extensions.rocks.parse-missing-module

(parse-missing-module err)

Extract X from Lua's standard module 'X' not found require error.

packages/core/src/fen/core/extensions/rocks.fnl:91

fen.core.extensions.rocks.manual-install-command

(manual-install-command module-name ?tree) -> string

Format the LuaRocks install command users can run to install a missing dependency into the fen rocks tree.

tags: extensions, rocks, diagnostics

packages/core/src/fen/core/extensions/rocks.fnl:97

fen.core.extensions.rocks.build-command

(build-command dir) -> string

Format the fen ext build command for an extension directory that declares a rockspec.

tags: extensions, rocks, build

packages/core/src/fen/core/extensions/rocks.fnl:106

fen.core.extensions.rocks.missing-module-message

(missing-module-message spec module-name) -> string

Build an actionable loader error for one missing Lua module, preferring fen ext build when the extension has a rockspec.

tags: extensions, rocks, diagnostics

packages/core/src/fen/core/extensions/rocks.fnl:121

fen.core.extensions.rocks.missing-modules-message

(missing-modules-message spec modules) -> string

Build an actionable loader error for declared missing modules, including shared-library hints from the manifest.

tags: extensions, rocks, diagnostics

packages/core/src/fen/core/extensions/rocks.fnl:136

fen.core.extensions.rocks.build!

(build! dir) -> exit-code

Build an extension rockspec into the fen rocks tree, compiling Fennel sources in process via the embedded compiler and installing through bundled LuaRocks, returning process-style exit codes.

tags: extensions, rocks, build

packages/core/src/fen/core/extensions/rocks.fnl:209

fen.core.extensions.state

Module neighborhood graph: DOT · SVG

fen.core.extensions.state module graph

fen.core.extensions.state.version

number

Schema/version marker for the persistent extension state table shared across reloadable extension modules.

tags: extensions, state, reload

packages/core/src/fen/core/extensions/state.fnl:3

fen.core.extensions.state.registry-version

number

Monotonic counter bumped by tagged-registry mutations so per-kind list memoization can skip recomputation on unchanged registries.

tags: extensions, state, registry, cache

packages/core/src/fen/core/extensions/state.fnl:177

fen.core.extensions.state.handlers

table

Event-bus handler buckets keyed by event name, preserving subscriptions across reloadable event-module updates.

tags: extensions, state, events

packages/core/src/fen/core/extensions/state.fnl:9

fen.core.extensions.state.tools-extra

[AgentTool]

Array registry of extension-contributed tools appended to the agent's base tool set each step.

tags: extensions, state, tools

packages/core/src/fen/core/extensions/state.fnl:15

fen.core.extensions.state.commands-extra

table

Singleton registry of slash-command contributions keyed by command name for dispatch and help introspection.

tags: extensions, state, commands

packages/core/src/fen/core/extensions/state.fnl:21

fen.core.extensions.state.controls-extra

[Control]

Array registry of presenter-neutral keyboard/control contributions exposed to active presenters.

tags: extensions, state, controls

packages/core/src/fen/core/extensions/state.fnl:27

fen.core.extensions.state.status-extra

[StatusItem]

Array registry of status-line contributors sorted by presenters into left/right status regions.

tags: extensions, state, status

packages/core/src/fen/core/extensions/state.fnl:33

fen.core.extensions.state.panel-extra

[Panel]

Array registry of non-modal panel contributions rendered by presenters that support panel regions.

tags: extensions, state, panels

packages/core/src/fen/core/extensions/state.fnl:39

fen.core.extensions.state.presenters

[Presenter]

Array registry of presenter contributions, including lifecycle callbacks and optional UI slot implementations.

tags: extensions, state, presenter

packages/core/src/fen/core/extensions/state.fnl:45

fen.core.extensions.state.introspectors-extra

[Introspector]

Array registry of extension-owned read-only snapshot providers exposed through agent_state, /extensions, and runtime diagnostics.

tags: extensions, state, introspection

packages/core/src/fen/core/extensions/state.fnl:51

fen.core.extensions.state.actions-extra

[Action]

Owner-scoped typed action registry for privileged harness and headless callers, kept separate from model-facing tools.

tags: extensions, state, actions

packages/core/src/fen/core/extensions/state.fnl:57

fen.core.extensions.state.providers

table

Singleton registry of LLM provider contributions keyed by provider name for deterministic model dispatch.

tags: extensions, state, providers

packages/core/src/fen/core/extensions/state.fnl:63

fen.core.extensions.state.auth-backends

table

Singleton registry of auth backend contributions keyed by name for provider credential resolution.

tags: extensions, state, auth

packages/core/src/fen/core/extensions/state.fnl:69

fen.core.extensions.state.session-backends

table

Singleton registry of session persistence backend contributions keyed by backend name.

tags: extensions, state, session

packages/core/src/fen/core/extensions/state.fnl:75

fen.core.extensions.state.session

table

Active session backend selection and cached SessionInfo shared by session commands, tools, and backends.

tags: extensions, state, session

packages/core/src/fen/core/extensions/state.fnl:81

fen.core.extensions.state.hooks

table

Lifecycle hook registries, currently the before-tool hook array consulted before tool execution.

tags: extensions, state, hooks

packages/core/src/fen/core/extensions/state.fnl:87

fen.core.extensions.state.input-handlers

[InputHandler]

Ordered registry of non-slash input handlers consulted before user input starts a turn.

tags: extensions, state, input

packages/core/src/fen/core/extensions/state.fnl:93

fen.core.extensions.state.prompt-fragments

[PromptFragment]

Ordered system-prompt fragment registry rendered into the agent context before provider calls.

tags: extensions, state, prompt

packages/core/src/fen/core/extensions/state.fnl:99

fen.core.extensions.state.prompt-next-seq

number

Monotonic sequence counter used to keep prompt-fragment ordering stable when fragments share the same order.

tags: extensions, state, prompt

packages/core/src/fen/core/extensions/state.fnl:105

fen.core.extensions.state.extensions

table

Loader status records keyed by extension name for runtime docs, diagnostics, and extension-listing commands.

tags: extensions, state, loader

packages/core/src/fen/core/extensions/state.fnl:111

fen.core.extensions.state.reload-core-failures

table

Core modules whose last reload failed, retained so the next reload retries the complete loaded core set.

tags: extensions, state, reload

packages/core/src/fen/core/extensions/state.fnl:117

fen.core.extensions.state.reload-fingerprints

table

Cached file/module fingerprints that let extension reload report checked and changed modules across reloads.

tags: extensions, state, reload

packages/core/src/fen/core/extensions/state.fnl:123

fen.core.extensions.state.dev-overlay

table|nil

Persistent baseline search paths and active trusted development worktree roots used by the repo-local reload-from command.

tags: extensions, state, development, reload

packages/core/src/fen/core/extensions/state.fnl:129

fen.core.extensions.state.enqueue!

function|nil

Interactive extension-installed enqueue bridge, available only while an interactive runtime is live.

tags: extensions, state, runtime, queue

packages/core/src/fen/core/extensions/state.fnl:135

fen.core.extensions.state.runtime-info

table|nil

Sanitized runtime/build metadata injected by fen.main and attached to durable diagnostics.

tags: extensions, state, diagnostics

packages/core/src/fen/core/extensions/state.fnl:141

fen.core.extensions.state.errors

[ExtensionError]

Bounded in-memory list of sanitized extension/event-bus errors for diagnostics and user-facing commands.

tags: extensions, state, diagnostics

packages/core/src/fen/core/extensions/state.fnl:147

fen.core.extensions.state.error-log-path

string|nil

Lazily initialized JSONL path where extension and event-bus errors are mirrored for postmortem inspection.

tags: extensions, state, diagnostics

packages/core/src/fen/core/extensions/state.fnl:153

fen.core.extensions.state.logs

[LogRecord]

Bounded persistent ring of sanitized owner-tagged extension log records retained across extension reloads.

tags: extensions, state, logs, diagnostics

packages/core/src/fen/core/extensions/state.fnl:159

fen.core.extensions.state.log-path

string|nil

Lazily initialized JSONL path where extension log records are mirrored for postmortem inspection.

tags: extensions, state, logs, diagnostics

packages/core/src/fen/core/extensions/state.fnl:165

fen.core.extensions.state.ui

table

Persistent presenter UI slot wrapper whose identity survives reload while active presenter behavior changes underneath.

tags: extensions, state, ui, reload

packages/core/src/fen/core/extensions/state.fnl:171

fen.core.extensions.test_api

Module neighborhood graph: DOT · SVG

fen.core.extensions.test_api module graph

fen.core.extensions.test_api.reset!

(reset!)

Wipe all registries IN PLACE so identity references survive reset.

packages/core/src/fen/core/extensions/test_api.fnl:23

fen.core.extensions.test_api.make-runtime-api

(make-runtime-api ?owner ?manifest ?opts)

Return an uncaptured runtime api for tests that need production-shaped

packages/core/src/fen/core/extensions/test_api.fnl:65

fen.core.extensions.test_api.make

(make ?owner ?manifest ?opts)

Return a captured api. Resets the global extensions registry so the

packages/core/src/fen/core/extensions/test_api.fnl:70

fen.core.extensions.util

Module neighborhood graph: DOT · SVG

fen.core.extensions.util module graph

fen.core.extensions.util.bump-registry-version!

(bump-registry-version!)

Called by every tagged-registry mutation (register/unregister). List

packages/core/src/fen/core/extensions/util.fnl:5

fen.core.extensions.util.deep-copy

(deep-copy v) -> any

Recursively copy Lua tables so extension registry records cannot mutate caller-owned contribution specs.

tags: extensions, registry, util

packages/core/src/fen/core/extensions/util.fnl:12

fen.core.extensions.util.freeze

(freeze t)

Read-only recursive proxy. Existing keys and nested tables reject writes.

packages/core/src/fen/core/extensions/util.fnl:25

fen.core.extensions.util.remove-where

(remove-where t pred)

Mutate t in place, dropping entries where (pred entry index) is true.

packages/core/src/fen/core/extensions/util.fnl:46

fen.core.extensions.util.clear-table

(clear-table t) -> nil

Delete every key from an existing table so long-lived state table identity survives reloads and resets.

tags: extensions, reload, state

packages/core/src/fen/core/extensions/util.fnl:56

fen.core.extensions.util.add-tagged!

(add-tagged! list spec owner)

Append a deep-copied contribution to list, tag it with core-reserved

packages/core/src/fen/core/extensions/util.fnl:69

fen.core.extensions.util.set-tagged!

(set-tagged! dict name spec owner)

Set a deep-copied singleton contribution in dict[name], tagged with

packages/core/src/fen/core/extensions/util.fnl:81

fen.core.llm

Module neighborhood graph: DOT · SVG

fen.core.llm module graph

fen.core.llm.get-provider

(get-provider provider-name) -> provider

Resolve a provider by registered :name. Errors if the name is unknown.

tags: provider, llm

packages/core/src/fen/core/llm/init.fnl:5

fen.core.llm.complete

(complete provider-name model context options ?on-event ?yield-fn)

Dispatch a completion to the named provider. Returns a canonical

packages/core/src/fen/core/llm/init.fnl:14

fen.core.llm.models

Module neighborhood graph: DOT · SVG

fen.core.llm.models module graph

fen.core.llm.models.config-dir

(config-dir) -> string

Return fen's user configuration directory, honoring XDG_CONFIG_HOME through the shared path helper.

tags: models, config, paths

packages/core/src/fen/core/llm/models.fnl:14

fen.core.llm.models.config-path

(config-path) -> string

Return the models.json path used for custom provider and model registry configuration.

tags: models, config, paths

packages/core/src/fen/core/llm/models.fnl:22

fen.core.llm.models.invalidate-caches!

(invalidate-caches!) -> nil

Clear the models.json and dynamic provider catalog caches at the explicit reload boundary.

tags: models, config, reload

packages/core/src/fen/core/llm/models.fnl:55

fen.core.llm.models.load

(load)

Returns the providers map. Cached after first successful read and cleared

packages/core/src/fen/core/llm/models.fnl:79

fen.core.llm.models.get-provider

(get-provider name)

Returns a normalized provider record, or nil if name isn't configured.

packages/core/src/fen/core/llm/models.fnl:101

fen.core.llm.models.register-providers!

(register-providers!)

Register models.json providers into the extension provider registry.

packages/core/src/fen/core/llm/models.fnl:143

fen.core.llm.models.resolve-api-key

(resolve-api-key value)

value → resolved string or nil.

packages/core/src/fen/core/llm/models.fnl:41

fen.core.llm.models.looks-like-env-var?

(looks-like-env-var? s)

Heuristic: an apiKey value that's all uppercase letters / digits /

packages/core/src/fen/core/llm/models.fnl:30

fen.core.llm.models.first-model-id

(first-model-id provider)

Convenience for default-model selection: pick the first model id declared

packages/core/src/fen/core/llm/models.fnl:106

fen.core.llm.models.available-models

(available-models opts)

Return flat model refs for registry-backed providers. Env-var and auth

packages/core/src/fen/core/llm/models.fnl:408

fen.core.llm.models.inspect-providers

(inspect-providers opts query) -> [ProviderInspection]

Return registered providers, offline local readiness, secret-free auth state, optional connectivity checks, and model catalog metadata.

tags: models, providers, introspection, auth

packages/core/src/fen/core/llm/models.fnl:359

fen.core.llm.models.dynamic-cache-snapshot

(dynamic-cache-snapshot) -> table

Return a secret-free summary of dynamic provider model catalog cache state.

tags: models, providers, introspection

packages/core/src/fen/core/llm/models.fnl:336

fen.core.llm.models.canonical-model-id

(canonical-model-id model-ref) -> string

Format a model reference as the canonical provider/id string accepted by model resolution and displayed by commands.

tags: models, resolve

packages/core/src/fen/core/llm/models.fnl:176

fen.core.llm.models.resolve-model-exact

(resolve-model-exact query models)

Resolve pi-mono-style exact model refs: canonical provider/id first,

packages/core/src/fen/core/llm/models.fnl:441

fen.core.llm.models.resolve-model

(resolve-model query models)

Resolve a model query for fen's command-mode v1: exact provider/id or

packages/core/src/fen/core/llm/models.fnl:450

fen.core.llm.models.resolve-cli-model

(resolve-cli-model query provider-name opts)

Client-side headless --model resolution against a single provider's catalog.

packages/core/src/fen/core/llm/models.fnl:546

fen.core.llm.models.split-model-ref

(split-model-ref model-ref)

Inverse of canonical-model-id for CLI flag parsing. Splits on the first

packages/core/src/fen/core/llm/models.fnl:184

fen.core.prompt

Module neighborhood graph: DOT · SVG

fen.core.prompt module graph

fen.core.prompt.build-context

(build-context opts tools) -> table

Build the minimal context table passed to registered system-prompt fragment renderers.

tags: prompt, extensions, context

packages/core/src/fen/core/prompt.fnl:7

fen.core.prompt.build

(build opts tools) -> string

Render all extension-contributed system-prompt fragments for opts/tools and return an empty string when none render.

tags: prompt, extensions

packages/core/src/fen/core/prompt.fnl:15

fen.core.prompt.stats

(stats opts tools) -> [PromptFragmentStat]

Return per-fragment rendered-size metadata (bytes and approximate tokens) for the opts/tools context without exposing fragment text.

tags: prompt, extensions, introspection

packages/core/src/fen/core/prompt.fnl:23

fen.core.settings

Module neighborhood graph: DOT · SVG

fen.core.settings module graph

fen.core.settings.config-dir

(config-dir) -> string

Return fen's user configuration directory, honoring XDG_CONFIG_HOME through the shared path helper.

tags: settings, config, paths

packages/core/src/fen/core/settings.fnl:10

fen.core.settings.config-path

(config-path) -> string

Return the settings.json path used for mutable user preferences such as the default provider and model.

tags: settings, config, paths

packages/core/src/fen/core/settings.fnl:18

fen.core.settings.load

(load ?p)

Return normalized defaults.json overlaid by mutable settings.json.

packages/core/src/fen/core/settings.fnl:88

fen.core.settings.save!

(save! settings ?p)

Write settings atomically, preserving any unknown top-level keys already on disk.

packages/core/src/fen/core/settings.fnl:95

fen.core.settings.set-defaults!

(set-defaults! provider model ?p)

Persist the default provider/model and return normalized settings.

packages/core/src/fen/core/settings.fnl:109

fen.core.settings.adopt-default-if-unset!

(adopt-default-if-unset! provider model ?p)

Adopt provider/model as the default only when nothing is selected yet. Used

packages/core/src/fen/core/settings.fnl:113

fen.core.settings.set-thinking-default!

(set-thinking-default! level ?p)

Persist the default provider-neutral thinking level.

packages/core/src/fen/core/settings.fnl:124

fen.core.settings.extension

(extension name ?path) -> table

Return extension name's merged extensions.<name> settings without the loader-owned enabled flag, or {}.

tags: settings, extensions

packages/core/src/fen/core/settings.fnl:128

fen.core.settings.set-extension-enabled!

(set-extension-enabled! name enabled? ?p)

Persist extensions.<name>.enabled, preserving every other key on disk.

packages/core/src/fen/core/settings.fnl:140

fen.core.storage

Module neighborhood graph: DOT · SVG

fen.core.storage module graph

fen.core.storage.read

(read path)

Return the document's raw string contents, or nil when it does not exist.

packages/core/src/fen/core/storage/init.fnl:9

fen.core.storage.write!

(write! path content)

Atomically replace the document at path with content. The default

packages/core/src/fen/core/storage/init.fnl:14

fen.core.storage.backends.default

Module neighborhood graph: DOT · SVG

fen.core.storage.backends.default module graph

fen.core.storage.backends.default.read

(read p)

Read entire file or return nil silently if missing. Config documents are

packages/core/src/fen/core/storage/backends/default.fnl:6

fen.core.storage.backends.default.write!

(write! p content)

Atomically replace p with content: create the parent directory, write a

packages/core/src/fen/core/storage/backends/default.fnl:15

fen.core.thinking

Module neighborhood graph: DOT · SVG

fen.core.thinking module graph

fen.core.thinking.LEVELS

packages/core/src/fen/core/thinking.fnl:59

fen.core.thinking.normalize-level

(normalize-level level)

Return a canonical keyword level, or nil when invalid/empty.

packages/core/src/fen/core/thinking.fnl:21

fen.core.thinking.valid-level?

packages/core/src/fen/core/thinking.fnl:59

fen.core.thinking.levels

packages/core/src/fen/core/thinking.fnl:59

fen.core.thinking.level-list

packages/core/src/fen/core/thinking.fnl:59

fen.core.thinking.level->provider-options

(level->provider-options level provider-api)

Map a thinking level to provider options for one provider API. Every

packages/core/src/fen/core/thinking.fnl:47

fen.core.tools

Module neighborhood graph: DOT · SVG

fen.core.tools module graph

fen.core.tools.descriptors

(descriptors reg)

Strip execute/label → canonical Tool[] (the shape providers wrap).

packages/core/src/fen/core/tools.fnl:21

fen.core.tools.execute-call

(execute-call reg tool-call ctx ?yield-fn)

Execute one canonical ToolCall block and wrap the result as a

packages/core/src/fen/core/tools.fnl:144

fen.core.types

Module neighborhood graph: DOT · SVG

fen.core.types module graph

fen.core.types.now-ms

(now-ms) -> number

Current epoch in milliseconds. Used as the :timestamp field on canonical messages.

tags: types, time

packages/core/src/fen/core/types.fnl:3

fen.core.types.text-block

(text-block s) -> TextContent

Build a {:type :text :text s} block. The visible-text content kind.

tags: types, content-block

packages/core/src/fen/core/types.fnl:10

fen.core.types.thinking-block

(thinking-block {: thinking : thinking-signature : redacted}) -> ThinkingContent

Build a {:type :thinking ...} block. Carries reasoning text plus the opaque echo signature required by Anthropic extended thinking and OpenAI Responses for multi-turn echo.

tags: types, content-block, thinking

packages/core/src/fen/core/types.fnl:18

fen.core.types.tool-call-block

(tool-call-block id name args) -> ToolCall

Build a {:type :tool-call :id :name :arguments} block. Arguments is a parsed Lua table — providers JSON-decode wire arguments before calling this.

tags: types, content-block, tool-call

packages/core/src/fen/core/types.fnl:30

fen.core.types.user-message

(user-message content) -> UserMessage

Build a {:role :user :content :timestamp} message. content is a string or [TextContent].

tags: types, message

packages/core/src/fen/core/types.fnl:39

fen.core.types.assistant-message

(assistant-message {: content : api : provider : model : usage : stop-reason : error-message}) -> AssistantMessage

Build a canonical AssistantMessage. Content defaults to []; usage and stop-reason fall back to safe defaults; error-message is set only when provided.

tags: types, message, assistant

packages/core/src/fen/core/types.fnl:48

fen.core.types.tool-result-message

(tool-result-message {: tool-call-id : tool-name : content : details : is-error?}) -> ToolResultMessage

Build a canonical ToolResultMessage. content is always an array; details is opaque presenter payload.

tags: types, message, tool-result

packages/core/src/fen/core/types.fnl:76

fen.core.types.assistant-error

(assistant-error api provider model error-message)

Convenience: build an AssistantMessage representing a transport/HTTP failure.

packages/core/src/fen/core/types.fnl:96

fen.core.types.INCOMPLETE-STREAM-MSG

string

Error message for a 2xx stream that closed without a terminal completion event. Shared so provider finalizers and their tests can't drift.

tags: types, message, error, streaming

packages/core/src/fen/core/types.fnl:106

fen.core.types.assistant-text

(assistant-text msg) -> string

Concatenate every TextContent block in msg.content. Returns "" if there are no text blocks.

tags: types, message, accessor

packages/core/src/fen/core/types.fnl:113

fen.core.types.assistant-tool-calls

(assistant-tool-calls msg) -> [ToolCall]

Return every :tool-call block in msg.content, in source order.

tags: types, message, accessor, tool-call

packages/core/src/fen/core/types.fnl:133

fen.core.types.assistant-thinking

(assistant-thinking msg) -> [ThinkingContent]

Return every :thinking block in msg.content, in source order.

tags: types, message, accessor, thinking

packages/core/src/fen/core/types.fnl:140

Extensions (fen.extensions.*)

fen.extensions.agent_state

Module neighborhood graph: DOT · SVG

fen.extensions.agent_state module graph

fen.extensions.agent_state.register

[api]

extensions/behaviors/companions/agent-state/init.fnl:93

fen.extensions.agent_state.tool

Module neighborhood graph: DOT · SVG

fen.extensions.agent_state.tool module graph

fen.extensions.agent_state.tool.execute

(execute args ctx ?api ?yield-fn) -> AgentToolResult

Execute an agent_state query against sanitized agent context and render the result as JSON or Fennel with truncation. Cooperative: yields before evaluation and inside expensive branches when ?yield-fn is given.

tags: tool, agent-state, execute

extensions/behaviors/companions/agent-state/tool.fnl:527

fen.extensions.agent_state.tool.parse-query

(parse-query s) -> expr|nil, err|nil

Parse the agent_state mini-query language into an expression tree, returning a user-facing parse error on invalid input.

tags: tool, agent-state, query

extensions/behaviors/companions/agent-state/tool.fnl:138

fen.extensions.agent_state.tool.eval-query

(eval-query expr state) -> any

Evaluate the parsed agent_state query operators against the sanitized snapshot without exposing general code execution.

tags: tool, agent-state, query, eval

extensions/behaviors/companions/agent-state/tool.fnl:500

fen.extensions.agent_state.tool.sanitized-state

(sanitized-state agent api ?ctx ?yield-fn)

Build the introspection snapshot. Cheap scalar/reference fields are eager;

extensions/behaviors/companions/agent-state/tool.fnl:387

fen.extensions.builtin_tools

Module neighborhood graph: DOT · SVG

fen.extensions.builtin_tools module graph

fen.extensions.builtin_tools.register

[api]

extensions/behaviors/kernel/builtin-tools/init.fnl:11

fen.extensions.builtin_tools.bash

Module neighborhood graph: DOT · SVG

fen.extensions.builtin_tools.bash module graph

fen.extensions.builtin_tools.bash.name

keyword

Registry name for the built-in Bash tool descriptor advertised to providers and slash-command docs.

tags: builtin, tools, bash, descriptor

extensions/behaviors/kernel/builtin-tools/bash.fnl:3

fen.extensions.builtin_tools.bash.bash

AgentToolSpec

Complete Bash tool specification exported by the module for registration in the built-in tool registry.

tags: builtin, tools, bash, descriptor

extensions/behaviors/kernel/builtin-tools/bash.fnl:9

fen.extensions.builtin_tools.bash.label

string

Human-readable label shown in tool-running status and generated tool listings before shell commands.

tags: builtin, tools, bash, ui

extensions/behaviors/kernel/builtin-tools/bash.fnl:15

fen.extensions.builtin_tools.bash.snippet

string

Short Bash tool teaser used by generated docs and compact tool summaries before the full description.

tags: builtin, tools, bash, docs

extensions/behaviors/kernel/builtin-tools/bash.fnl:21

fen.extensions.builtin_tools.bash.description

string

Provider-facing Bash tool description documenting merged stdout/stderr and tail-truncation behavior.

tags: builtin, tools, bash, docs

extensions/behaviors/kernel/builtin-tools/bash.fnl:27

fen.extensions.builtin_tools.bash.parameters

JSONSchema

JSON schema for Bash tool arguments, including command text, optional timeout, and checked working directory.

tags: builtin, tools, bash, schema

extensions/behaviors/kernel/builtin-tools/bash.fnl:33

fen.extensions.builtin_tools.bash.execute

(execute args ctx yield-fn?) -> AgentToolResult

Bash tool executor that runs a shell command through the timed/cancellable process helper and returns capped output with exit status.

tags: builtin, tools, bash, execution

extensions/behaviors/kernel/builtin-tools/bash.fnl:39

fen.extensions.builtin_tools.edit

Module neighborhood graph: DOT · SVG

fen.extensions.builtin_tools.edit module graph

fen.extensions.builtin_tools.edit.name

keyword

Registry name for the built-in exact-replacement edit tool descriptor.

tags: builtin, tools, edit, descriptor

extensions/behaviors/kernel/builtin-tools/edit.fnl:9

fen.extensions.builtin_tools.edit.edit

AgentToolSpec

Complete edit tool specification exported for registration with batch and single-file replacement modes.

tags: builtin, tools, edit, descriptor

extensions/behaviors/kernel/builtin-tools/edit.fnl:15

fen.extensions.builtin_tools.edit.label

string

Human-readable label shown in tool-running status and generated listings for exact text edits.

tags: builtin, tools, edit, ui

extensions/behaviors/kernel/builtin-tools/edit.fnl:21

fen.extensions.builtin_tools.edit.snippet

string

Short edit tool teaser describing precise replacements for compact generated docs.

tags: builtin, tools, edit, docs

extensions/behaviors/kernel/builtin-tools/edit.fnl:27

fen.extensions.builtin_tools.edit.description

string

Provider-facing edit tool description covering uniqueness, snapshot application, and all-or-nothing batch validation.

tags: builtin, tools, edit, docs

extensions/behaviors/kernel/builtin-tools/edit.fnl:33

fen.extensions.builtin_tools.edit.parameters

JSONSchema

JSON schema for single-file and batch edit payloads, including exact old and replacement strings.

tags: builtin, tools, edit, schema

extensions/behaviors/kernel/builtin-tools/edit.fnl:39

fen.extensions.builtin_tools.edit.execute

(execute args ctx? yield-fn?) -> AgentToolResult

Edit tool executor that validates mutually exclusive modes, yields between large validation/write phases, applies exact replacements, and reports write summaries.

tags: builtin, tools, edit, execution

extensions/behaviors/kernel/builtin-tools/edit.fnl:45

fen.extensions.builtin_tools.find

Module neighborhood graph: DOT · SVG

fen.extensions.builtin_tools.find module graph

fen.extensions.builtin_tools.find.name

keyword

Registry name for the built-in recursive file find tool descriptor.

tags: builtin, tools, find, descriptor

extensions/behaviors/kernel/builtin-tools/find.fnl:5

fen.extensions.builtin_tools.find.find

AgentToolSpec

Complete find tool specification exported for name-glob file discovery through the built-in registry.

tags: builtin, tools, find, descriptor

extensions/behaviors/kernel/builtin-tools/find.fnl:11

fen.extensions.builtin_tools.find.label

string

Human-readable label shown in tool-running status and generated listings for file discovery.

tags: builtin, tools, find, ui

extensions/behaviors/kernel/builtin-tools/find.fnl:17

fen.extensions.builtin_tools.find.snippet

string

Short find tool teaser used by generated docs and compact tool summaries.

tags: builtin, tools, find, docs

extensions/behaviors/kernel/builtin-tools/find.fnl:23

fen.extensions.builtin_tools.find.description

string

Provider-facing find tool description for recursive filename-glob searches.

tags: builtin, tools, find, docs

extensions/behaviors/kernel/builtin-tools/find.fnl:29

fen.extensions.builtin_tools.find.parameters

JSONSchema

JSON schema for find arguments, including required name glob, optional root path, and result limit.

tags: builtin, tools, find, schema

extensions/behaviors/kernel/builtin-tools/find.fnl:35

fen.extensions.builtin_tools.find.execute

(execute args ctx? yield-fn?) -> AgentToolResult

Find tool executor that shells out to POSIX find, limits result lines, and cooperatively drains output when a yield-fn is provided.

tags: builtin, tools, find, execution

extensions/behaviors/kernel/builtin-tools/find.fnl:41

fen.extensions.builtin_tools.grep

Module neighborhood graph: DOT · SVG

fen.extensions.builtin_tools.grep module graph

fen.extensions.builtin_tools.grep.name

keyword

Registry name for the built-in recursive grep tool descriptor.

tags: builtin, tools, grep, descriptor

extensions/behaviors/kernel/builtin-tools/grep.fnl:5

fen.extensions.builtin_tools.grep.grep

AgentToolSpec

Complete grep tool specification exported for content search through the built-in registry.

tags: builtin, tools, grep, descriptor

extensions/behaviors/kernel/builtin-tools/grep.fnl:11

fen.extensions.builtin_tools.grep.label

string

Human-readable label shown in tool-running status and generated listings for text searches.

tags: builtin, tools, grep, ui

extensions/behaviors/kernel/builtin-tools/grep.fnl:17

fen.extensions.builtin_tools.grep.snippet

string

Short grep tool teaser used by generated docs before the full search option contract.

tags: builtin, tools, grep, docs

extensions/behaviors/kernel/builtin-tools/grep.fnl:23

fen.extensions.builtin_tools.grep.description

string

Provider-facing grep tool description covering recursive regex search behavior.

tags: builtin, tools, grep, docs

extensions/behaviors/kernel/builtin-tools/grep.fnl:29

fen.extensions.builtin_tools.grep.parameters

JSONSchema

JSON schema for grep arguments, including pattern, path, glob, literal, case, context, and limit controls.

tags: builtin, tools, grep, schema

extensions/behaviors/kernel/builtin-tools/grep.fnl:35

fen.extensions.builtin_tools.grep.execute

(execute args ctx? yield-fn?) -> AgentToolResult

Grep tool executor that builds a POSIX grep pipeline, enforces an output limit, and cooperatively drains matches when a yield-fn is provided.

tags: builtin, tools, grep, execution

extensions/behaviors/kernel/builtin-tools/grep.fnl:41

fen.extensions.builtin_tools.ls

Module neighborhood graph: DOT · SVG

fen.extensions.builtin_tools.ls module graph

fen.extensions.builtin_tools.ls.name

keyword

Registry name for the built-in directory listing tool descriptor.

tags: builtin, tools, ls, descriptor

extensions/behaviors/kernel/builtin-tools/ls.fnl:7

fen.extensions.builtin_tools.ls.ls

AgentToolSpec

Complete ls tool specification exported for listing directory entries through the built-in registry.

tags: builtin, tools, ls, descriptor

extensions/behaviors/kernel/builtin-tools/ls.fnl:13

fen.extensions.builtin_tools.ls.label

string

Human-readable label shown in tool-running status and generated listings for directory scans.

tags: builtin, tools, ls, ui

extensions/behaviors/kernel/builtin-tools/ls.fnl:19

fen.extensions.builtin_tools.ls.snippet

string

Short ls tool teaser used by generated docs and compact tool summaries.

tags: builtin, tools, ls, docs

extensions/behaviors/kernel/builtin-tools/ls.fnl:25

fen.extensions.builtin_tools.ls.description

string

Provider-facing ls tool description for shallow directory entry listings.

tags: builtin, tools, ls, docs

extensions/behaviors/kernel/builtin-tools/ls.fnl:31

fen.extensions.builtin_tools.ls.parameters

JSONSchema

JSON schema for ls arguments, including optional target directory and output line limit.

tags: builtin, tools, ls, schema

extensions/behaviors/kernel/builtin-tools/ls.fnl:37

fen.extensions.builtin_tools.ls.execute

(execute args ctx? yield-fn?) -> AgentToolResult

Ls tool executor that shells out to POSIX ls, cooperatively drains output when a yield-fn is provided, applies optional limits, and caps long output.

tags: builtin, tools, ls, execution

extensions/behaviors/kernel/builtin-tools/ls.fnl:43

fen.extensions.builtin_tools.read

Module neighborhood graph: DOT · SVG

fen.extensions.builtin_tools.read module graph

fen.extensions.builtin_tools.read.name

keyword

Registry name for the built-in file read tool descriptor.

tags: builtin, tools, read, descriptor

extensions/behaviors/kernel/builtin-tools/read.fnl:7

fen.extensions.builtin_tools.read.read

AgentToolSpec

Complete read tool specification exported for single-file and batched file inspection.

tags: builtin, tools, read, descriptor

extensions/behaviors/kernel/builtin-tools/read.fnl:13

fen.extensions.builtin_tools.read.label

string

Human-readable label shown in tool-running status and generated listings for file reads.

tags: builtin, tools, read, ui

extensions/behaviors/kernel/builtin-tools/read.fnl:19

fen.extensions.builtin_tools.read.snippet

string

Short read tool teaser used by generated docs before the full paging and truncation contract.

tags: builtin, tools, read, docs

extensions/behaviors/kernel/builtin-tools/read.fnl:25

fen.extensions.builtin_tools.read.description

string

Provider-facing read tool description covering full slurps, offset/limit paging, batched reads, and truncation tags.

tags: builtin, tools, read, docs

extensions/behaviors/kernel/builtin-tools/read.fnl:31

fen.extensions.builtin_tools.read.parameters

JSONSchema

JSON schema for read arguments, including path, batched paths, and optional line window controls.

tags: builtin, tools, read, schema

extensions/behaviors/kernel/builtin-tools/read.fnl:37

fen.extensions.builtin_tools.read.execute

(execute args ctx? yield-fn?) -> AgentToolResult

Read tool executor that dispatches single or batch reads, yielding during large file and batch work when cooperative.

tags: builtin, tools, read, execution

extensions/behaviors/kernel/builtin-tools/read.fnl:43

fen.extensions.builtin_tools.registry

Module neighborhood graph: DOT · SVG

fen.extensions.builtin_tools.registry module graph

fen.extensions.builtin_tools.registry.registry

[AgentToolSpec]

Ordered list of built-in tool specifications registered by the builtin-tools extension and reused by tests.

tags: builtin, tools, registry

extensions/behaviors/kernel/builtin-tools/registry.fnl:3

Module neighborhood graph: DOT · SVG

fen.extensions.builtin_tools.tool_search module graph

fen.extensions.builtin_tools.tool_search.name

extensions/behaviors/kernel/builtin-tools/tool_search.fnl:101

fen.extensions.builtin_tools.tool_search.tool_search

extensions/behaviors/kernel/builtin-tools/tool_search.fnl:101

fen.extensions.builtin_tools.tool_search.label

extensions/behaviors/kernel/builtin-tools/tool_search.fnl:101

fen.extensions.builtin_tools.tool_search.snippet

extensions/behaviors/kernel/builtin-tools/tool_search.fnl:101

fen.extensions.builtin_tools.tool_search.description

extensions/behaviors/kernel/builtin-tools/tool_search.fnl:101

fen.extensions.builtin_tools.tool_search.parameters

extensions/behaviors/kernel/builtin-tools/tool_search.fnl:101

fen.extensions.builtin_tools.tool_search.execute

extensions/behaviors/kernel/builtin-tools/tool_search.fnl:101

fen.extensions.builtin_tools.truncate

Module neighborhood graph: DOT · SVG

fen.extensions.builtin_tools.truncate module graph

fen.extensions.builtin_tools.truncate.DEFAULT-MAX-LINES

number

Default maximum number of tool-output lines kept inline before truncation spills the full output.

tags: builtin, tools, truncate, defaults

extensions/behaviors/kernel/builtin-tools/truncate.fnl:3

fen.extensions.builtin_tools.truncate.DEFAULT-MAX-BYTES

number

Default maximum number of tool-output bytes kept inline before truncation writes a spill file.

tags: builtin, tools, truncate, defaults

extensions/behaviors/kernel/builtin-tools/truncate.fnl:10

fen.extensions.builtin_tools.truncate.truncate-head

(truncate-head s opts ?yield-fn)

Keep the first lines of s up to maxLines / maxBytes.

extensions/behaviors/kernel/builtin-tools/truncate.fnl:101

fen.extensions.builtin_tools.truncate.truncate-tail

(truncate-tail s opts ?yield-fn)

Keep the last lines of s up to maxLines / maxBytes.

extensions/behaviors/kernel/builtin-tools/truncate.fnl:133

fen.extensions.builtin_tools.util

Module neighborhood graph: DOT · SVG

fen.extensions.builtin_tools.util module graph

fen.extensions.builtin_tools.util.agent-result

(agent-result content is-error? details) -> AgentToolResult

Build the common AgentToolResult shape used by built-in tools, preserving optional presenter details.

tags: tools, results, util

extensions/behaviors/kernel/builtin-tools/util.fnl:3

fen.extensions.builtin_tools.util.text-result

(text-result text is-error? details)

Wrap plain text and optional details as a canonical AgentToolResult.

extensions/behaviors/kernel/builtin-tools/util.fnl:13

fen.extensions.builtin_tools.util.ok

(ok text) -> AgentToolResult

Wrap successful plain text output as a canonical non-error AgentToolResult.

tags: tools, results, util

extensions/behaviors/kernel/builtin-tools/util.fnl:17

fen.extensions.builtin_tools.util.err

(err message) -> AgentToolResult

Wrap an error message as a canonical AgentToolResult whose text is prefixed with error:.

tags: tools, results, util

extensions/behaviors/kernel/builtin-tools/util.fnl:25

fen.extensions.builtin_tools.util.shellquote

(shellquote s) -> string

Quote a built-in tool path or argument as one POSIX shell word for system probes.

tags: tools, shell, util

extensions/behaviors/kernel/builtin-tools/util.fnl:33

fen.extensions.builtin_tools.util.int-arg

(int-arg v default)

Normalize integer-ish tool args.

extensions/behaviors/kernel/builtin-tools/util.fnl:41

fen.extensions.builtin_tools.util.result-text

(result-text r) -> string

Extract the first text block from an AgentToolResult for tests and composed tool helpers.

tags: tools, results, util

extensions/behaviors/kernel/builtin-tools/util.fnl:46

fen.extensions.builtin_tools.util.dir-exists?

(dir-exists? path) -> boolean

Check whether a path is a directory using a shell-quoted POSIX test probe.

tags: tools, filesystem, util

extensions/behaviors/kernel/builtin-tools/util.fnl:55

fen.extensions.builtin_tools.write

Module neighborhood graph: DOT · SVG

fen.extensions.builtin_tools.write module graph

fen.extensions.builtin_tools.write.name

keyword

Registry name for the built-in file write tool descriptor.

tags: builtin, tools, write, descriptor

extensions/behaviors/kernel/builtin-tools/write.fnl:6

fen.extensions.builtin_tools.write.write

AgentToolSpec

Complete write tool specification exported for creating or overwriting files.

tags: builtin, tools, write, descriptor

extensions/behaviors/kernel/builtin-tools/write.fnl:12

fen.extensions.builtin_tools.write.label

string

Human-readable label shown in tool-running status and generated listings for file writes.

tags: builtin, tools, write, ui

extensions/behaviors/kernel/builtin-tools/write.fnl:18

fen.extensions.builtin_tools.write.snippet

string

Short write tool teaser used by generated docs and compact tool summaries.

tags: builtin, tools, write, docs

extensions/behaviors/kernel/builtin-tools/write.fnl:24

fen.extensions.builtin_tools.write.description

string

Provider-facing write tool description documenting overwrite semantics and parent-directory creation.

tags: builtin, tools, write, docs

extensions/behaviors/kernel/builtin-tools/write.fnl:30

fen.extensions.builtin_tools.write.parameters

JSONSchema

JSON schema for write arguments containing the destination path and complete file content.

tags: builtin, tools, write, schema

extensions/behaviors/kernel/builtin-tools/write.fnl:36

fen.extensions.builtin_tools.write.execute

(execute args ctx? yield-fn?) -> AgentToolResult

Write tool executor that creates missing parent directories, yields during large content writes, and reports byte counts.

tags: builtin, tools, write, execution

extensions/behaviors/kernel/builtin-tools/write.fnl:42

fen.extensions.claude_memory

Module neighborhood graph: DOT · SVG

fen.extensions.claude_memory module graph

fen.extensions.claude_memory.inspect

[?settings]

extensions/behaviors/companions/claude-memory/init.fnl:27

fen.extensions.claude_memory.register

[api]

extensions/behaviors/companions/claude-memory/init.fnl:68

fen.extensions.compact

Module neighborhood graph: DOT · SVG

fen.extensions.compact module graph

fen.extensions.compact.register

extensions/behaviors/companions/compact/init.fnl:430

fen.extensions.compact.register!

extensions/behaviors/companions/compact/init.fnl:430

fen.extensions.compact._test

extensions/behaviors/companions/compact/init.fnl:430

fen.extensions.decide

Module neighborhood graph: DOT · SVG

fen.extensions.decide module graph

fen.extensions.decide.register

(register api) -> true

Capture the api handle for the decision service, finish ask-async! tasks left by a previous instance with nil, pump new tasks on each :runtime-tick, and register the observing input handler, its staleness listeners, and /decide undo.

tags: decide, register

extensions/behaviors/kernel/decide/init.fnl:38

fen.extensions.decide.compaction

Module neighborhood graph: DOT · SVG

fen.extensions.decide.compaction module graph

fen.extensions.decide.compaction.rate-tool-results

(rate-tool-results messages span ?yield!) -> (span dropped)

Rate each older tool result of at least 1 KiB in span and return a copy where results rated >= 0.8 no longer needed are one-line stubs, plus the stub count; returns (span 0) when decide is disabled or never answers. Errors raised by ?yield! (cancellation) propagate.

tags: decide, compaction

extensions/behaviors/kernel/decide/compaction.fnl:163

fen.extensions.decide.compaction.ask-good-moment!

(ask-good-moment! messages on-good) -> nil

Ask in the background whether the last subtask in messages finished, and call (on-good) only when the answer is at least 0.7; does nothing when decide is disabled. The caller re-checks its own conditions inside on-good.

tags: decide, compaction, async

extensions/behaviors/kernel/decide/compaction.fnl:212

fen.extensions.decide.input

Module neighborhood graph: DOT · SVG

fen.extensions.decide.input module graph

fen.extensions.decide.input.forget-pending!

(forget-pending! ev) -> nil

Drop pending idle tokens so a late answer for an older prompt never emits a hint; wired to :user and :reset-conversation.

tags: decide, input, hint

extensions/behaviors/kernel/decide/input.fnl:151

fen.extensions.decide.input.undo!

(undo!) -> {:ok true :queued true :queue :steering}|{:ok false :error msg}

Move the line last classified as a follow-up back to the steering queue while it is still pending there; backs /decide undo.

tags: decide, input, queue

extensions/behaviors/kernel/decide/input.fnl:246

fen.extensions.decide.input.on-status-info

(on-status-info ev) -> nil

Drop the /decide undo record once a :set-status-info event reports an empty follow-up queue, as clear-queues! does for /cancel-all, /new, /resume, and /handoff.

tags: decide, input, queue

extensions/behaviors/kernel/decide/input.fnl:258

fen.extensions.decide.input.observe!

(observe! api input ctx) -> nil

Observe one submitted line: an idle prompt starts a background preference and topic-shift check, a plain busy line a background classification; nothing asks while decide is disabled, and the input is never changed.

tags: decide, input

extensions/behaviors/kernel/decide/input.fnl:271

fen.extensions.decide.jev

Module neighborhood graph: DOT · SVG

fen.extensions.decide.jev module graph

fen.extensions.decide.jev.encode-request

(encode-request model state questions) -> string

Encode a Decisions API request body for one state and a map of validated noul/choice questions; raises when state is not JSON-encodable.

tags: decide, jev, openrouter

extensions/behaviors/kernel/decide/jev.fnl:15

fen.extensions.decide.jev.post

(post body api-key timeout-ms ?yield) -> {:status :body :headers}|{:error}

POST an encoded request to the Decisions API through fen.util.http with an overall timeout and a connect timeout capped at 2s; errors raised by ?yield propagate.

tags: decide, jev, openrouter, http

extensions/behaviors/kernel/decide/jev.fnl:28

fen.extensions.decide.jev.parse-response

(parse-response resp questions) -> (answers usage)|(nil reason)

Map an HTTP response to answers keyed by question id ({:type :noul :noul p} or {:type :choice :choice opt :probabilities tbl :confidence c}) plus the raw usage; any transport error, non-200, malformed body, or missing/mistyped answer returns nil and a reason.

tags: decide, jev, openrouter

extensions/behaviors/kernel/decide/jev.fnl:82

fen.extensions.decide.openai

Module neighborhood graph: DOT · SVG

fen.extensions.decide.openai module graph

fen.extensions.decide.openai.encode-request

(encode-request model state questions) -> string

Encode an OpenAI Decisions API request body for one state and a map of validated noul/choice questions; raises when state is not JSON-encodable or a question type is unsupported.

tags: decide, openai

extensions/behaviors/kernel/decide/openai.fnl:34

fen.extensions.decide.openai.post

(post body api-key timeout-ms ?yield) -> {:status :body :headers}|{:error}

POST an encoded request to the OpenAI Decisions API through fen.util.http with an overall timeout and a connect timeout capped at 2s; errors raised by ?yield propagate.

tags: decide, openai, http

extensions/behaviors/kernel/decide/openai.fnl:66

fen.extensions.decide.openai.parse-response

(parse-response resp questions) -> (answers usage)|(nil reason)

Map an OpenAI Decisions HTTP response to answers keyed by question id ({:type :noul :noul p} or {:type :choice :choice opt :probabilities tbl :confidence c}) plus raw usage; transport errors, non-200, malformed bodies, refusals, duplicate answers, or missing/mistyped answers return nil and a reason.

tags: decide, openai

extensions/behaviors/kernel/decide/openai.fnl:130

fen.extensions.decide.service

Module neighborhood graph: DOT · SVG

fen.extensions.decide.service module graph

fen.extensions.decide.service.max-request-bytes

number

Byte cap on one encoded decision request (state plus questions); larger requests are skipped and return nil, keeping input well under Jev's 32k-token context. Consumers split or truncate state to fit.

tags: decide, service

extensions/behaviors/kernel/decide/service.fnl:38

fen.extensions.decide.service.enabled?

(enabled?) -> boolean

Whether the decide extension is currently loaded, resolved at call time from the loader's status record; false after it is disabled on /reload.

tags: decide, service, extensions

extensions/behaviors/kernel/decide/service.fnl:45

fen.extensions.decide.service.ask

(ask state questions ?opts) -> answers|nil

Ask the configured decisions backend (Jev on OpenRouter or OpenAI Decisions) typed questions ({id {:type :noul|:choice :instructions str :criteria tbl}}) about one JSON-encodable state; cooperative when ?opts.yield is given, blocking otherwise. Returns answers keyed by id or nil on any failure; errors raised by ?opts.yield propagate.

tags: decide, service

extensions/behaviors/kernel/decide/service.fnl:128

fen.extensions.decide.service.ask-async!

(ask-async! state questions on-done) -> nil

Run ask in a cooperative task advanced once per :runtime-tick and call (on-done answers-or-nil) exactly once while the extension stays loaded; immediately with nil when disabled. /reload or disable-then-enable finishes a pending task with nil; presenters without ticks (--print, json) never run it.

tags: decide, service, async

extensions/behaviors/kernel/decide/service.fnl:179

fen.extensions.decide.service.finish-pending!

(finish-pending!)

Finish every pending task with nil without resuming it. Called on each

extensions/behaviors/kernel/decide/service.fnl:199

fen.extensions.decide.service.pump!

(pump!)

Resume each pending async task once; finished tasks report and drop out.

extensions/behaviors/kernel/decide/service.fnl:208

fen.extensions.decide.state

Module neighborhood graph: DOT · SVG

fen.extensions.decide.state module graph

fen.extensions.decide.state.api

extensions/behaviors/kernel/decide/state.fnl:13

fen.extensions.decide.state.tasks

extensions/behaviors/kernel/decide/state.fnl:13

fen.extensions.decide.state.topic-pending

extensions/behaviors/kernel/decide/state.fnl:13

fen.extensions.decide.state.preference-pending

extensions/behaviors/kernel/decide/state.fnl:13

fen.extensions.decide.state.reclassified

extensions/behaviors/kernel/decide/state.fnl:13

fen.extensions.default_prompt

Module neighborhood graph: DOT · SVG

fen.extensions.default_prompt module graph

fen.extensions.default_prompt.guidelines-section

(guidelines-section tools) -> string

Render built-in model guidance tailored to the currently available file, bash, read/edit, and agent_state tools.

tags: prompt, default, guidelines, tools

extensions/behaviors/kernel/default-prompt/init.fnl:31

fen.extensions.default_prompt.available-tools-section

(available-tools-section tools)

List tools that are advertised only after tool_search activation. Always-

extensions/behaviors/kernel/default-prompt/init.fnl:60

fen.extensions.default_prompt.context-section

(context-section context-files) -> string|nil

Render loaded project context files as titled prompt sections for the default system prompt.

tags: prompt, default, context

extensions/behaviors/kernel/default-prompt/init.fnl:75

fen.extensions.default_prompt.default-prompt

string

Built-in fallback system prompt used when no SYSTEM.md or CLI system override is available.

tags: prompt, default, data

extensions/behaviors/kernel/default-prompt/init.fnl:147

fen.extensions.default_prompt.register

function

Registration entrypoint alias for installing the default prompt fragments into the extension registry.

tags: prompt, default, register

extensions/behaviors/kernel/default-prompt/init.fnl:154

fen.extensions.default_prompt.register!

function

Registration entrypoint alias for installing the default prompt fragments into the extension registry.

tags: prompt, default, register

extensions/behaviors/kernel/default-prompt/init.fnl:154

fen.extensions.default_prompt.current-loader

function

Loader accessor alias returning the cached default-prompt resource loader, creating it on first use.

tags: prompt, default, resources

extensions/behaviors/kernel/default-prompt/init.fnl:162

fen.extensions.default_prompt.prefer

Module neighborhood graph: DOT · SVG

fen.extensions.default_prompt.prefer module graph

fen.extensions.default_prompt.prefer.resolve-user-file

(resolve-user-file) -> string

Resolve the target instruction file for user-scoped preferences, preferring existing user files.

tags: prompt, prefer, user

extensions/behaviors/kernel/default-prompt/prefer.fnl:30

fen.extensions.default_prompt.prefer.resolve-project-file

(resolve-project-file ?start-cwd) -> string

Resolve the target instruction file for project-scoped preferences, checking ancestors leaf-to-root.

tags: prompt, prefer, project

extensions/behaviors/kernel/default-prompt/prefer.fnl:42

fen.extensions.default_prompt.prefer.format-entry

(format-entry existing pref-text) -> string

Format markdown content appending pref-text as a bullet under Preferences.

tags: prompt, prefer, format

extensions/behaviors/kernel/default-prompt/prefer.fnl:56

fen.extensions.default_prompt.prefer.save-preference!

(save-preference! target-path pref-text) -> (boolean, string)

Append a preference bullet to the target markdown file, creating the file or section if absent.

tags: prompt, prefer, storage

extensions/behaviors/kernel/default-prompt/prefer.fnl:75

fen.extensions.default_prompt.prefer.get-candidate

(get-candidate) -> string|nil

Return the pending suggested preference candidate, if any.

tags: prompt, prefer, candidate

extensions/behaviors/kernel/default-prompt/prefer.fnl:93

fen.extensions.default_prompt.prefer.set-candidate!

(set-candidate! ?text) -> nil

Set or clear the pending suggested preference candidate.

tags: prompt, prefer, candidate

extensions/behaviors/kernel/default-prompt/prefer.fnl:101

fen.extensions.default_prompt.prefer.register!

(register! api ?get-loader) -> true

Register the /prefer command, observe :hint suggestions, and clear stale candidates.

tags: prompt, prefer, command, register

extensions/behaviors/kernel/default-prompt/prefer.fnl:133

fen.extensions.default_prompt.prefer.register

extensions/behaviors/kernel/default-prompt/prefer.fnl:185

fen.extensions.default_prompt.resources

Module neighborhood graph: DOT · SVG

fen.extensions.default_prompt.resources module graph

fen.extensions.default_prompt.resources.make

(make opts) -> ResourceLoader

Create and immediately load a reloadable resource snapshot for SYSTEM overlays and project context files.

tags: prompt, resources, context, reload

extensions/behaviors/kernel/default-prompt/resources.fnl:74

fen.extensions.default_prompt.resources.cwd

function

Path helper alias returning the current logical working directory for resource scans.

tags: prompt, resources, paths

extensions/behaviors/kernel/default-prompt/resources.fnl:89

fen.extensions.default_prompt.resources.config-dir

function

Helper alias returning fen's XDG configuration directory for prompt overlays and global context.

tags: prompt, resources, paths

extensions/behaviors/kernel/default-prompt/resources.fnl:96

fen.extensions.default_prompt.resources.load-project-context-files

function

Helper alias loading global and ancestor AGENTS.md or CLAUDE.md context files in prompt order.

tags: prompt, resources, context

extensions/behaviors/kernel/default-prompt/resources.fnl:103

fen.extensions.default_prompt.resources.load-system-file

function

Helper alias resolving the effective SYSTEM.md or APPEND_SYSTEM.md overlay for the current project.

tags: prompt, resources, system

extensions/behaviors/kernel/default-prompt/resources.fnl:110

fen.extensions.default_prompt.resources._ancestors-root-to-leaf

function

Test helper alias exposing the root-to-leaf ancestor walker used by prompt resource discovery.

tags: prompt, resources, tests, paths

extensions/behaviors/kernel/default-prompt/resources.fnl:117

fen.extensions.docs

Module neighborhood graph: DOT · SVG

fen.extensions.docs module graph

fen.extensions.docs.register

(register api?) -> true

Register the /docs command, fen_docs tool, docs panel, and dismiss handler against the extension API.

tags: docs, register, command, tool, panel

extensions/behaviors/kernel/docs/init.fnl:571

fen.extensions.docs.contracts

Module neighborhood graph: DOT · SVG

fen.extensions.docs.contracts module graph

fen.extensions.docs.contracts.types

table

Canonical message, content, tool, usage, and agent-context type contracts shared by providers, tools, sessions, and docs.

tags: docs, contracts, types

extensions/behaviors/kernel/docs/contracts.fnl:15

fen.extensions.docs.contracts.register-kinds

table

Extension registration kind contracts describing required fields for tools, commands, providers, presenters, panels, hooks, and prompt fragments.

tags: docs, contracts, extensions, register

extensions/behaviors/kernel/docs/contracts.fnl:172

fen.extensions.docs.contracts.events

table

Event bus contract table documenting emitted runtime event shapes and fields consumed by presenters and extensions.

tags: docs, contracts, events, bus

extensions/behaviors/kernel/docs/contracts.fnl:335

fen.extensions.docs.contracts.interfaces

table

Interface contract table for provider, auth backend, session backend, and presenter records.

tags: docs, contracts, interfaces, providers, sessions

extensions/behaviors/kernel/docs/contracts.fnl:684

fen.extensions.docs.state

Module neighborhood graph: DOT · SVG

fen.extensions.docs.state module graph

fen.extensions.docs.state.visible?

boolean

Visibility flag for the persistent /docs panel that lists generated API and contract entries.

tags: docs, state, panel

extensions/behaviors/kernel/docs/state.fnl:3

fen.extensions.docs.state.selected-topic

string|nil

Current /docs topic selection used to keep the active group stable across row refreshes.

tags: docs, state, selection

extensions/behaviors/kernel/docs/state.fnl:9

fen.extensions.docs.state.selected-name

string|nil

Current /docs entry selection within the active topic for keyboard focus and detail rendering.

tags: docs, state, selection

extensions/behaviors/kernel/docs/state.fnl:15

fen.extensions.docs.state.cached-rows

[PresenterRow]|nil

Cached rendered /docs panel rows reused while topic, selection, and terminal width are unchanged.

tags: docs, state, cache

extensions/behaviors/kernel/docs/state.fnl:21

fen.extensions.docs.state.cached-at

number

Timestamp for the /docs panel cache, allowing registry documentation to be refreshed predictably.

tags: docs, state, cache

extensions/behaviors/kernel/docs/state.fnl:27

fen.extensions.docs.state.cached-w

number

Terminal width associated with cached /docs rows so resize events rebuild wrapped documentation text.

tags: docs, state, cache

extensions/behaviors/kernel/docs/state.fnl:33

fen.extensions.docs.state.cached-selected-topic

string|nil

Topic selection value associated with cached /docs rows so topic changes invalidate the panel cache.

tags: docs, state, cache, selection

extensions/behaviors/kernel/docs/state.fnl:39

fen.extensions.docs.state.cached-selected-name

string|nil

Entry selection value associated with cached /docs rows so focus changes invalidate detail rendering.

tags: docs, state, cache, selection

extensions/behaviors/kernel/docs/state.fnl:45

fen.extensions.essentials

Module neighborhood graph: DOT · SVG

fen.extensions.essentials module graph

fen.extensions.essentials.register

[api]

extensions/behaviors/kernel/essentials/init.fnl:9

fen.extensions.essentials.commands.help

Module neighborhood graph: DOT · SVG

fen.extensions.essentials.commands.help module graph

fen.extensions.essentials.commands.help.register

(register api) -> nil

Register the /help command that lists available slash commands and controls grouped by extension owner.

tags: commands, help, register

extensions/behaviors/kernel/essentials/commands/help.fnl:88

fen.extensions.essentials.commands.model

Module neighborhood graph: DOT · SVG

fen.extensions.essentials.commands.model module graph

fen.extensions.essentials.commands.model.register

(register api) -> nil

Register the /model command for selecting configured models by overlay with an optional initial query, or by direct index or exact id.

tags: commands, model, register

extensions/behaviors/kernel/essentials/commands/model.fnl:214

fen.extensions.essentials.commands.thinking

Module neighborhood graph: DOT · SVG

fen.extensions.essentials.commands.thinking module graph

fen.extensions.essentials.commands.thinking.register

(register api) -> nil

Register the /thinking command for inspecting and setting provider-neutral thinking effort.

tags: commands, thinking, register

extensions/behaviors/kernel/essentials/commands/thinking.fnl:108

fen.extensions.extensions_inspector

Module neighborhood graph: DOT · SVG

fen.extensions.extensions_inspector module graph

fen.extensions.extensions_inspector.register

[api]

extensions/behaviors/inspectors/extensions/init.fnl:8

fen.extensions.extensions_inspector.commands.extension

Module neighborhood graph: DOT · SVG

fen.extensions.extensions_inspector.commands.extension module graph

fen.extensions.extensions_inspector.commands.extension.register

(register api) -> nil

Register extension management commands plus the extension picker/detail panel and dismiss handler.

tags: commands, extensions, register

extensions/behaviors/inspectors/extensions/commands/extension.fnl:606

fen.extensions.extensions_inspector.state.extensions

Module neighborhood graph: DOT · SVG

fen.extensions.extensions_inspector.state.extensions module graph

fen.extensions.extensions_inspector.state.extensions.visible?

boolean

Visibility flag for the persistent /extensions panel, kept across hot reloads until dismissed or toggled.

tags: builtin, commands, state, extensions, panel

extensions/behaviors/inspectors/extensions/state/extensions.fnl:3

fen.extensions.extensions_inspector.state.extensions.view

extensions/behaviors/inspectors/extensions/state/extensions.fnl:39

fen.extensions.extensions_inspector.state.extensions.extensions

extensions/behaviors/inspectors/extensions/state/extensions.fnl:39

fen.extensions.extensions_inspector.state.extensions.selected-name

string|nil

Currently selected extension name used by the /extensions panel to keep focus stable while rows refresh.

tags: builtin, commands, state, extensions, selection

extensions/behaviors/inspectors/extensions/state/extensions.fnl:9

fen.extensions.extensions_inspector.state.extensions.registry-kind

extensions/behaviors/inspectors/extensions/state/extensions.fnl:39

fen.extensions.extensions_inspector.state.extensions.cached-rows

[PresenterRow]|nil

Cached rendered /extensions panel rows reused between paints when width and selection have not changed.

tags: builtin, commands, state, extensions, cache

extensions/behaviors/inspectors/extensions/state/extensions.fnl:15

fen.extensions.extensions_inspector.state.extensions.cached-at

number

Timestamp for the /extensions panel row cache, allowing throttled refreshes of registry-derived content.

tags: builtin, commands, state, extensions, cache

extensions/behaviors/inspectors/extensions/state/extensions.fnl:21

fen.extensions.extensions_inspector.state.extensions.cached-w

number

Terminal width associated with cached /extensions rows so resizes invalidate wrapped panel content.

tags: builtin, commands, state, extensions, cache

extensions/behaviors/inspectors/extensions/state/extensions.fnl:27

fen.extensions.extensions_inspector.state.extensions.cached-selected-name

string|nil

Extension selection value associated with cached rows so focus changes trigger a panel rerender.

tags: builtin, commands, state, extensions, cache, selection

extensions/behaviors/inspectors/extensions/state/extensions.fnl:33

fen.extensions.extensions_inspector.state.extensions.cached-view

extensions/behaviors/inspectors/extensions/state/extensions.fnl:39

fen.extensions.extensions_inspector.state.extensions.cached-registry-kind

extensions/behaviors/inspectors/extensions/state/extensions.fnl:39

fen.extensions.goal

Module neighborhood graph: DOT · SVG

fen.extensions.goal module graph

fen.extensions.goal.register

extensions/behaviors/companions/goal/init.fnl:843

fen.extensions.goal.register!

extensions/behaviors/companions/goal/init.fnl:844

fen.extensions.goal._state

extensions/behaviors/companions/goal/init.fnl:845

fen.extensions.goal._test

extensions/behaviors/companions/goal/init.fnl:846

fen.extensions.goal.state

Module neighborhood graph: DOT · SVG

fen.extensions.goal.state module graph

fen.extensions.goal.state.status

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.idle

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.visible?

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.objective

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.iteration-count

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.max-iterations

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.last-result

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.last-error

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.last-reason

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.last-marker

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.compaction-required?

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.last-compaction

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.retry-iteration?

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.started-at

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.active-turn-id

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.updated-at

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.version

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.cached-rows

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.cached-w

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.cached-version

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal.state.session-key

extensions/behaviors/companions/goal/state.fnl:3

fen.extensions.goal_headless

Module neighborhood graph: DOT · SVG

fen.extensions.goal_headless module graph

fen.extensions.goal_headless.run

[ctx]

extensions/adapters/presenters/goal_headless/init.fnl:88

fen.extensions.goal_headless.register

[api]

extensions/adapters/presenters/goal_headless/init.fnl:104

fen.extensions.goal_headless._test

extensions/adapters/presenters/goal_headless/init.fnl:117

fen.extensions.handoff

Module neighborhood graph: DOT · SVG

fen.extensions.handoff module graph

fen.extensions.handoff.register

extensions/behaviors/companions/handoff/init.fnl:152

fen.extensions.handoff.register!

(register!) -> true

Register the /handoff command that summarizes the current session and seeds a fresh session with the result.

tags: handoff, command, session

extensions/behaviors/companions/handoff/init.fnl:134

fen.extensions.json

Module neighborhood graph: DOT · SVG

fen.extensions.json module graph

fen.extensions.json.run

(run ctx) -> exit-code

Step the agent once and write a structured JSON result blob. Returns a non-zero CLI exit code (1) when the turn failed or the output could not be written, and 0 otherwise, leaving the process exit to the CLI layer.

tags: json, presenter, run

extensions/adapters/presenters/json/init.fnl:53

fen.extensions.json.register

[api]

extensions/adapters/presenters/json/init.fnl:80

fen.extensions.mem

Module neighborhood graph: DOT · SVG

fen.extensions.mem module graph

fen.extensions.mem.report-rows

(report-rows run-state opts ?api)

Build the memory report as a list of {:text :style} rows. Used by

extensions/behaviors/companions/mem/init.fnl:137

fen.extensions.mem.panel-spec

(panel-spec) -> PanelSpec

Return the /mem panel contribution that sizes and renders the cached memory diagnostics above the input.

tags: mem, panel, register

extensions/behaviors/companions/mem/init.fnl:199

fen.extensions.mem.register

function

Registration entrypoint alias for installing the /mem command, panel, sampling hook, and dismiss handler.

tags: mem, register, command, panel

extensions/behaviors/companions/mem/init.fnl:266

fen.extensions.mem.register!

function

Registration entrypoint alias for installing the /mem command, panel, sampling hook, and dismiss handler.

tags: mem, register, command, panel

extensions/behaviors/companions/mem/init.fnl:266

fen.extensions.mem._state

table

Test and diagnostics alias for the persistent memory diagnostics state table.

tags: mem, state, tests

extensions/behaviors/companions/mem/init.fnl:274

fen.extensions.mem.state

Module neighborhood graph: DOT · SVG

fen.extensions.mem.state module graph

fen.extensions.mem.state.samples

[number]

Rolling Lua heap samples used by the memory diagnostics panel to render its history sparkline.

tags: mem, state, samples, panel

extensions/behaviors/companions/mem/state.fnl:3

fen.extensions.mem.state.max-samples

number

Maximum number of memory samples retained for the diagnostics panel history window.

tags: mem, state, samples, config

extensions/behaviors/companions/mem/state.fnl:9

fen.extensions.mem.state.peak-kb

number

Largest observed Lua heap size in kilobytes, used for peak reporting and sparkline scaling.

tags: mem, state, samples, peak

extensions/behaviors/companions/mem/state.fnl:15

fen.extensions.mem.state.visible?

boolean

Visibility flag for the persistent memory diagnostics panel toggled by the /mem command.

tags: mem, state, panel

extensions/behaviors/companions/mem/state.fnl:21

fen.extensions.mem.state.run-state

table|nil

Last presenter run-state snapshot used by the memory panel to display agent and session details.

tags: mem, state, runtime, panel

extensions/behaviors/companions/mem/state.fnl:27

fen.extensions.mem.state.cached-rows

[PresenterRow]|nil

Cached rendered memory panel rows reused between paints to avoid noisy heap recomputation.

tags: mem, state, cache, panel

extensions/behaviors/companions/mem/state.fnl:33

fen.extensions.mem.state.cached-at

number

Timestamp for the memory panel cache, supporting its one-hertz refresh throttle.

tags: mem, state, cache, panel

extensions/behaviors/companions/mem/state.fnl:39

fen.extensions.mem.state.cached-w

number

Terminal width associated with cached memory rows so resize events rebuild the bordered panel.

tags: mem, state, cache, panel

extensions/behaviors/companions/mem/state.fnl:45

fen.extensions.plan

Module neighborhood graph: DOT · SVG

fen.extensions.plan module graph

fen.extensions.plan.register

extensions/behaviors/companions/plan/init.fnl:374

fen.extensions.plan.register!

extensions/behaviors/companions/plan/init.fnl:375

fen.extensions.plan._state

extensions/behaviors/companions/plan/init.fnl:376

fen.extensions.plan.state

Module neighborhood graph: DOT · SVG

fen.extensions.plan.state module graph

fen.extensions.plan.state.mode

extensions/behaviors/companions/plan/state.fnl:3

fen.extensions.plan.state.idle

extensions/behaviors/companions/plan/state.fnl:3

fen.extensions.plan.state.visible?

extensions/behaviors/companions/plan/state.fnl:3

fen.extensions.plan.state.last-plan

extensions/behaviors/companions/plan/state.fnl:3

fen.extensions.plan.state.last-goal

extensions/behaviors/companions/plan/state.fnl:3

fen.extensions.plan.state.last-error

extensions/behaviors/companions/plan/state.fnl:3

fen.extensions.plan.state.last-blocked

extensions/behaviors/companions/plan/state.fnl:3

fen.extensions.plan.state.revision-count

extensions/behaviors/companions/plan/state.fnl:3

fen.extensions.plan.state.run-state

extensions/behaviors/companions/plan/state.fnl:3

fen.extensions.plan.state.active-turn-id

extensions/behaviors/companions/plan/state.fnl:3

fen.extensions.plan.state.updated-at

extensions/behaviors/companions/plan/state.fnl:3

fen.extensions.plan.state.version

extensions/behaviors/companions/plan/state.fnl:3

fen.extensions.plan.state.cached-rows

extensions/behaviors/companions/plan/state.fnl:3

fen.extensions.plan.state.cached-w

extensions/behaviors/companions/plan/state.fnl:3

fen.extensions.plan.state.cached-version

extensions/behaviors/companions/plan/state.fnl:3

fen.extensions.print

Module neighborhood graph: DOT · SVG

fen.extensions.print module graph

fen.extensions.print.run

(run ctx) -> exit-code

Execute the one-shot print presenter by stepping the agent with the supplied prompt, printing final text, and returning a non-zero CLI exit code (1) when the turn fails so the CLI layer owns the process exit.

tags: print, presenter, run

extensions/adapters/presenters/print/init.fnl:31

fen.extensions.print.register

[api]

extensions/adapters/presenters/print/init.fnl:54

fen.extensions.profiler

Module neighborhood graph: DOT · SVG

fen.extensions.profiler module graph

fen.extensions.profiler.register

[api]

extensions/behaviors/inspectors/profiler/init.fnl:18

fen.extensions.profiler.activity

Module neighborhood graph: DOT · SVG

fen.extensions.profiler.activity module graph

fen.extensions.profiler.activity.enabled?

[]

extensions/behaviors/inspectors/profiler/activity.fnl:8

fen.extensions.profiler.activity.span-begin!

[name ?metadata]

extensions/behaviors/inspectors/profiler/activity.fnl:10

fen.extensions.profiler.activity.span-end!

[token]

extensions/behaviors/inspectors/profiler/activity.fnl:13

fen.extensions.profiler.activity.activity!

[name ?metadata]

extensions/behaviors/inspectors/profiler/activity.fnl:16

fen.extensions.profiler.activity.counter-add!

[name ?amount]

extensions/behaviors/inspectors/profiler/activity.fnl:22

fen.extensions.profiler.commands

Module neighborhood graph: DOT · SVG

fen.extensions.profiler.commands module graph

fen.extensions.profiler.commands.execute-tool

(execute-tool args ctx) -> ToolResultMessage

Adapt profile-tool arguments to the profiler command implementation.

tags: profiler, performance, tools

extensions/behaviors/inspectors/profiler/commands.fnl:125

fen.extensions.profiler.commands.register

(register api) -> nil

Register /profile controls and a cheap profiler-state introspection snapshot.

tags: profiler, performance, commands, register

extensions/behaviors/inspectors/profiler/commands.fnl:144

fen.extensions.profiler.export

Module neighborhood graph: DOT · SVG

fen.extensions.profiler.export module graph

fen.extensions.profiler.export.model-output-dir

(model-output-dir output)

Confine an untrusted tool argument to the profile artifact root. Human

extensions/behaviors/inspectors/profiler/export.fnl:150

fen.extensions.profiler.export.default-output-dir

[]

extensions/behaviors/inspectors/profiler/export.fnl:166

fen.extensions.profiler.export.save!

(save! output-dir?) -> {dir, speedscope, folded, metadata}

Export the current bounded statistical capture as Speedscope JSON, folded stacks, and explicit metadata.

tags: profiler, performance, export

extensions/behaviors/inspectors/profiler/export.fnl:184

fen.extensions.profiler.export.snapshot

[]

extensions/behaviors/inspectors/profiler/export.fnl:201

fen.extensions.profiler.state

Module neighborhood graph: DOT · SVG

fen.extensions.profiler.state module graph

fen.extensions.profiler.state.record-wall-gap!

[gap]

extensions/behaviors/inspectors/profiler/state.fnl:181

fen.extensions.profiler.state.span-begin!

[name ?metadata]

extensions/behaviors/inspectors/profiler/state.fnl:188

fen.extensions.profiler.state.span-end!

[token]

extensions/behaviors/inspectors/profiler/state.fnl:206

fen.extensions.profiler.state.counter-add!

[name ?amount]

extensions/behaviors/inspectors/profiler/state.fnl:217

fen.extensions.profiler.state.mark!

[name]

extensions/behaviors/inspectors/profiler/state.fnl:230

fen.extensions.profiler.state.start!

[opts]

extensions/behaviors/inspectors/profiler/state.fnl:251

fen.extensions.profiler.state.stop!

[]

extensions/behaviors/inspectors/profiler/state.fnl:297

fen.extensions.profiler.state.reset!

[]

extensions/behaviors/inspectors/profiler/state.fnl:312

fen.extensions.profiler.state.elapsed-wall-ms

[]

extensions/behaviors/inspectors/profiler/state.fnl:317

fen.extensions.profiler.state.elapsed-cpu

[]

extensions/behaviors/inspectors/profiler/state.fnl:322

fen.extensions.profiler_tool

Module neighborhood graph: DOT · SVG

fen.extensions.profiler_tool module graph

fen.extensions.profiler_tool.register

[api]

extensions/behaviors/inspectors/profiler-tool/init.fnl:7

fen.extensions.prompt

Module neighborhood graph: DOT · SVG

fen.extensions.prompt module graph

fen.extensions.prompt.register

[api]

extensions/behaviors/inspectors/prompt/init.fnl:7

fen.extensions.prompt.commands.prompt

Module neighborhood graph: DOT · SVG

fen.extensions.prompt.commands.prompt module graph

fen.extensions.prompt.commands.prompt.register

(register api) -> nil

Register the /prompt command and prompt-fragment panel for inspecting rendered system prompt state.

tags: commands, prompt, register

extensions/behaviors/inspectors/prompt/commands/prompt.fnl:91

fen.extensions.prompt.state.prompt

Module neighborhood graph: DOT · SVG

fen.extensions.prompt.state.prompt module graph

fen.extensions.prompt.state.prompt.visible?

boolean

Visibility flag for the persistent /prompt panel that previews assembled system prompt fragments.

tags: builtin, commands, state, prompt, panel

extensions/behaviors/inspectors/prompt/state/prompt.fnl:3

fen.extensions.prompt.state.prompt.cached-rows

[PresenterRow]|nil

Cached rendered /prompt panel rows reused while prompt content and terminal width remain stable.

tags: builtin, commands, state, prompt, cache

extensions/behaviors/inspectors/prompt/state/prompt.fnl:9

fen.extensions.prompt.state.prompt.cached-at

number

Timestamp for the /prompt panel cache, used to avoid rebuilding prompt rows on every repaint.

tags: builtin, commands, state, prompt, cache

extensions/behaviors/inspectors/prompt/state/prompt.fnl:15

fen.extensions.prompt.state.prompt.cached-w

number

Terminal width associated with cached /prompt rows so resize events rebuild wrapped preview text.

tags: builtin, commands, state, prompt, cache

extensions/behaviors/inspectors/prompt/state/prompt.fnl:21

fen.extensions.provider_anthropic

Module neighborhood graph: DOT · SVG

fen.extensions.provider_anthropic module graph

fen.extensions.provider_anthropic.register

[api]

extensions/adapters/providers/anthropic/init.fnl:16

fen.extensions.provider_anthropic.anthropic_messages

Module neighborhood graph: DOT · SVG

fen.extensions.provider_anthropic.anthropic_messages module graph

fen.extensions.provider_anthropic.anthropic_messages.api

keyword

Provider API family keyword used by registry metadata for the Anthropic Messages adapter.

tags: provider, anthropic, metadata

extensions/adapters/providers/anthropic/anthropic_messages.fnl:633

fen.extensions.provider_anthropic.anthropic_messages.provider

keyword

Provider owner keyword used on canonical assistant messages emitted by the Anthropic adapter.

tags: provider, anthropic, metadata

extensions/adapters/providers/anthropic/anthropic_messages.fnl:638

fen.extensions.provider_anthropic.anthropic_messages.default-base-url

string

Default Anthropic Messages endpoint used when provider options do not override base-url.

tags: provider, anthropic, metadata

extensions/adapters/providers/anthropic/anthropic_messages.fnl:643

fen.extensions.provider_anthropic.anthropic_messages.default-version

string

Default anthropic-version header sent with Messages API requests.

tags: provider, anthropic, metadata

extensions/adapters/providers/anthropic/anthropic_messages.fnl:648

fen.extensions.provider_anthropic.anthropic_messages.convert-messages

(convert-messages messages _system-prompt)

Canonical Messages → Anthropic MessageParam[]. The system prompt is NOT

extensions/adapters/providers/anthropic/anthropic_messages.fnl:98

fen.extensions.provider_anthropic.anthropic_messages.convert-tools

(convert-tools tools)

Canonical Tool[] → Anthropic Tool[] (flat, with input_schema).

extensions/adapters/providers/anthropic/anthropic_messages.fnl:151

fen.extensions.provider_anthropic.anthropic_messages.map-stop-reason

(map-stop-reason reason)

Anthropic stop_reason → canonical StopReason. Mirrors pi-mono

extensions/adapters/providers/anthropic/anthropic_messages.fnl:164

fen.extensions.provider_anthropic.anthropic_messages.parse-response

(parse-response resp model)

Anthropic response → canonical AssistantMessage.

extensions/adapters/providers/anthropic/anthropic_messages.fnl:187

fen.extensions.provider_anthropic.anthropic_messages.process-stream-event!

(process-stream-event! state ev emit)

Consume one decoded Anthropic Messages stream event table.

extensions/adapters/providers/anthropic/anthropic_messages.fnl:549

fen.extensions.provider_anthropic.anthropic_messages.new-stream-state

string

Default anthropic-version header sent with Messages API requests.

tags: provider, anthropic, metadata

extensions/adapters/providers/anthropic/anthropic_messages.fnl:648

fen.extensions.provider_anthropic.anthropic_messages.finalize-stream-state

(finalize-stream-state state emit) -> AssistantMessage

Finalize Anthropic streaming state into a canonical assistant message and emit the terminal done/error event.

tags: provider, anthropic, streaming

extensions/adapters/providers/anthropic/anthropic_messages.fnl:580

fen.extensions.provider_anthropic.anthropic_messages.finalize-stream

(finalize-stream state parser parser-error model resp on-event)

Shared post-request handling for the streaming pipeline.

extensions/adapters/providers/anthropic/anthropic_messages.fnl:600

fen.extensions.provider_anthropic.anthropic_messages.build-body

(build-body model context max-tokens options) -> table

Build an Anthropic Messages request body with system prompt/cache markers, tools, parallel-tool policy, options.tool-choice :none (tool_choice {type: none}), and optional thinking budget. Tool-less requests whose history contains tool blocks get inert stub tools with tool_choice none.

tags: provider, anthropic, request, cache

extensions/adapters/providers/anthropic/anthropic_messages.fnl:284

fen.extensions.provider_anthropic.anthropic_messages.list-models

string

Default anthropic-version header sent with Messages API requests.

tags: provider, anthropic, metadata

extensions/adapters/providers/anthropic/anthropic_messages.fnl:648

fen.extensions.provider_anthropic.anthropic_messages.complete

(complete model context options ?on-event ?yield-fn)

Single entry. Routes by ?on-event / ?yield-fn:

extensions/adapters/providers/anthropic/anthropic_messages.fnl:613

fen.extensions.provider_mock

Module neighborhood graph: DOT · SVG

fen.extensions.provider_mock module graph

fen.extensions.provider_mock.register

[api]

extensions/adapters/providers/mock/init.fnl:18

fen.extensions.provider_mock.mock_provider

Module neighborhood graph: DOT · SVG

fen.extensions.provider_mock.mock_provider module graph

fen.extensions.provider_mock.mock_provider.api

keyword

Provider API family keyword for the deterministic mock adapter.

tags: provider, mock, metadata

extensions/adapters/providers/mock/mock_provider.fnl:183

fen.extensions.provider_mock.mock_provider.provider

keyword

Provider owner keyword stamped on canonical assistant messages emitted by the mock adapter.

tags: provider, mock, metadata

extensions/adapters/providers/mock/mock_provider.fnl:188

fen.extensions.provider_mock.mock_provider.default-model

keyword

Provider owner keyword stamped on canonical assistant messages emitted by the mock adapter.

tags: provider, mock, metadata

extensions/adapters/providers/mock/mock_provider.fnl:188

fen.extensions.provider_mock.mock_provider.mock

keyword

Provider owner keyword stamped on canonical assistant messages emitted by the mock adapter.

tags: provider, mock, metadata

extensions/adapters/providers/mock/mock_provider.fnl:188

fen.extensions.provider_mock.mock_provider.models

keyword

Provider owner keyword stamped on canonical assistant messages emitted by the mock adapter.

tags: provider, mock, metadata

extensions/adapters/providers/mock/mock_provider.fnl:188

fen.extensions.provider_mock.mock_provider.complete

(complete model context options ?on-event ?yield-fn) -> AssistantMessage

Deterministic provider entry point. Builds a canonical AssistantMessage from the resolved mock script (or an echo default) and, when streaming, replays it through a local block-event synthesizer. When options.mock-record is a table, appends a snapshot of each outbound call (model, options, tool-choice, system-prompt, tools, copied messages) so tests can assert what the agent sent. Performs no network I/O.

tags: provider, mock, complete

extensions/adapters/providers/mock/mock_provider.fnl:157

fen.extensions.provider_mock.mock_provider.spec->assistant

(spec->assistant spec model) -> AssistantMessage

Normalize a mock turn spec (string or table) into a canonical AssistantMessage; stop-reason defaults to :tool-use when the turn calls a tool, else :stop.

tags: provider, mock, testing

extensions/adapters/providers/mock/mock_provider.fnl:78

fen.extensions.provider_openai

Module neighborhood graph: DOT · SVG

fen.extensions.provider_openai module graph

fen.extensions.provider_openai.register

[api]

extensions/adapters/providers/openai/init.fnl:45

fen.extensions.provider_openai.openai_codex_keychain

Module neighborhood graph: DOT · SVG

fen.extensions.provider_openai.openai_codex_keychain module graph

fen.extensions.provider_openai.openai_codex_keychain.default-agent-dir

(default-agent-dir)

Return fen's writable auth directory. Kept as the public name because

extensions/adapters/providers/openai/openai_codex_keychain.fnl:24

fen.extensions.provider_openai.openai_codex_keychain.default-auth-path

(default-auth-path)

Return fen's writable auth.json path.

extensions/adapters/providers/openai/openai_codex_keychain.fnl:29

fen.extensions.provider_openai.openai_codex_keychain.candidate-read-auth-paths

(candidate-read-auth-paths)

Return auth.json paths checked for credentials. Fen only reads its

extensions/adapters/providers/openai/openai_codex_keychain.fnl:33

fen.extensions.provider_openai.openai_codex_keychain.load

(load ?path)

Read one auth.json and return the decoded table. Returns {} if missing,

extensions/adapters/providers/openai/openai_codex_keychain.fnl:64

fen.extensions.provider_openai.openai_codex_keychain.get

(get provider-id ?path)

Return a provider record. With an explicit path, read only that file.

extensions/adapters/providers/openai/openai_codex_keychain.fnl:80

fen.extensions.provider_openai.openai_codex_keychain.save

(save data ?path)

Atomic write of the entire auth.json table. Creates the parent directory

extensions/adapters/providers/openai/openai_codex_keychain.fnl:85

fen.extensions.provider_openai.openai_codex_keychain.set

(set provider-id record ?path) -> table

Read-modify-write one provider credential record into auth.json and return the persisted auth table.

tags: codex, auth, storage, write

extensions/adapters/providers/openai/openai_codex_keychain.fnl:116

fen.extensions.provider_openai.openai_codex_login

Module neighborhood graph: DOT · SVG

fen.extensions.provider_openai.openai_codex_login module graph

fen.extensions.provider_openai.openai_codex_login.AUTHORIZE-URL

string

ChatGPT OAuth authorization endpoint used by the manual Codex PKCE login flow.

tags: codex, auth, login, metadata

extensions/adapters/providers/openai/openai_codex_login.fnl:234

fen.extensions.provider_openai.openai_codex_login.REDIRECT-URI

string

Localhost redirect URI registered for the ChatGPT Codex OAuth client and shown in pasted callback URLs.

tags: codex, auth, login, metadata

extensions/adapters/providers/openai/openai_codex_login.fnl:239

fen.extensions.provider_openai.openai_codex_login.SCOPE

string

OAuth scope string requesting identity, email/profile, and offline refresh-token access.

tags: codex, auth, login, metadata

extensions/adapters/providers/openai/openai_codex_login.fnl:244

fen.extensions.provider_openai.openai_codex_login.ORIGINATOR

string

Originator value sent in the authorization URL to identify fen's simplified Codex login flow.

tags: codex, auth, login, metadata

extensions/adapters/providers/openai/openai_codex_login.fnl:249

fen.extensions.provider_openai.openai_codex_login.generate-pkce

(generate-pkce)

Return a fresh PKCE pair: {:verifier ... :challenge ...} where

extensions/adapters/providers/openai/openai_codex_login.fnl:66

fen.extensions.provider_openai.openai_codex_login.build-authorize-url

(build-authorize-url pkce state)

Compose the authorization URL the user opens in their browser.

extensions/adapters/providers/openai/openai_codex_login.fnl:75

fen.extensions.provider_openai.openai_codex_login.parse-authorization-input

(parse-authorization-input input)

Accept the full callback URL the user pastes (e.g.

extensions/adapters/providers/openai/openai_codex_login.fnl:109

fen.extensions.provider_openai.openai_codex_login.extract-query-param

(extract-query-param query key)

Lift key=value out of an &-separated query string. Returns the

extensions/adapters/providers/openai/openai_codex_login.fnl:90

fen.extensions.provider_openai.openai_codex_login.exchange-code!

(exchange-code! code verifier)

POST to the token endpoint with grant_type=authorization_code.

extensions/adapters/providers/openai/openai_codex_login.fnl:133

fen.extensions.provider_openai.openai_codex_login.login!

(login! ?path)

Run the full PKCE login flow. Prints the authorize URL, prompts for

extensions/adapters/providers/openai/openai_codex_login.fnl:191

fen.extensions.provider_openai.openai_codex_login.logout!

(logout! ?path)

Remove the openai-codex record from auth.json. No-op (with a

extensions/adapters/providers/openai/openai_codex_login.fnl:217

fen.extensions.provider_openai.openai_codex_oauth

Module neighborhood graph: DOT · SVG

fen.extensions.provider_openai.openai_codex_oauth module graph

fen.extensions.provider_openai.openai_codex_oauth.PROVIDER-ID

keyword

Auth storage provider id used for openai-codex credential records in auth.json.

tags: codex, auth, oauth, metadata

extensions/adapters/providers/openai/openai_codex_oauth.fnl:164

fen.extensions.provider_openai.openai_codex_oauth.TOKEN-URL

string

OpenAI OAuth token endpoint used for Codex PKCE exchange and refresh-token grants.

tags: codex, auth, oauth, metadata

extensions/adapters/providers/openai/openai_codex_oauth.fnl:169

fen.extensions.provider_openai.openai_codex_oauth.CLIENT-ID

string

OAuth client id used by the ChatGPT Codex login and refresh flows.

tags: codex, auth, oauth, metadata

extensions/adapters/providers/openai/openai_codex_oauth.fnl:174

fen.extensions.provider_openai.openai_codex_oauth.decode-jwt

(decode-jwt token)

Decode a JWT and return its payload as a Lua table. Does NOT verify

extensions/adapters/providers/openai/openai_codex_oauth.fnl:38

fen.extensions.provider_openai.openai_codex_oauth.extract-account-id

(extract-account-id access-token)

Pull the chatgpt_account_id from the JWT payload's

extensions/adapters/providers/openai/openai_codex_oauth.fnl:48

fen.extensions.provider_openai.openai_codex_oauth.refresh!

(refresh! refresh-token ?opts)

POST to the token endpoint with refresh_token grant. Returns the fresh

extensions/adapters/providers/openai/openai_codex_oauth.fnl:84

fen.extensions.provider_openai.openai_codex_oauth.expiring-soon?

(expiring-soon? creds) -> boolean

Return true when stored Codex credentials are missing expiry or expire within the proactive refresh margin.

tags: codex, auth, oauth, refresh

extensions/adapters/providers/openai/openai_codex_oauth.fnl:120

fen.extensions.provider_openai.openai_codex_oauth.configured?

(configured? ?path)

Return true when auth.json contains a structurally usable openai-codex

extensions/adapters/providers/openai/openai_codex_oauth.fnl:145

fen.extensions.provider_openai.openai_codex_oauth.get-fresh-creds!

(get-fresh-creds! ?path ?opts)

Read auth.json, refresh the openai-codex record if it's missing, expired,

extensions/adapters/providers/openai/openai_codex_oauth.fnl:152

fen.extensions.provider_openai.openai_codex_oauth.form-encode

(form-encode params) -> string

Encode OAuth form parameters as an ampersand-joined application/x-www-form-urlencoded body.

tags: codex, auth, oauth, form

extensions/adapters/providers/openai/openai_codex_oauth.fnl:71

fen.extensions.provider_openai.openai_codex_oauth.url-encode

(url-encode s) -> string

Percent-encode one OAuth form component using the unreserved character set required by application/x-www-form-urlencoded.

tags: codex, auth, oauth, form

extensions/adapters/providers/openai/openai_codex_oauth.fnl:61

fen.extensions.provider_openai.openai_codex_responses

Module neighborhood graph: DOT · SVG

fen.extensions.provider_openai.openai_codex_responses module graph

fen.extensions.provider_openai.openai_codex_responses.api

keyword

Provider API family keyword used by registry metadata for the ChatGPT Codex Responses adapter.

tags: codex, provider, responses, metadata

extensions/adapters/providers/openai/openai_codex_responses.fnl:339

fen.extensions.provider_openai.openai_codex_responses.provider

keyword

Provider owner keyword used on canonical assistant messages emitted by the Codex adapter.

tags: codex, provider, responses, metadata

extensions/adapters/providers/openai/openai_codex_responses.fnl:344

fen.extensions.provider_openai.openai_codex_responses.default-base-url

string

Default ChatGPT backend API root used by the Codex Responses adapter before appending /codex/responses.

tags: codex, provider, responses, metadata

extensions/adapters/providers/openai/openai_codex_responses.fnl:349

fen.extensions.provider_openai.openai_codex_responses.build-url

(build-url base-url) -> string

Normalize a ChatGPT backend base URL into the Codex Responses endpoint while preserving fully-qualified Codex URLs.

tags: codex, provider, responses, http

extensions/adapters/providers/openai/openai_codex_responses.fnl:50

fen.extensions.provider_openai.openai_codex_responses.build-models-url

(build-models-url base-url ?client-version) -> string

Normalize a ChatGPT backend base URL into the Codex model catalog endpoint.

tags: codex, provider, models, http

extensions/adapters/providers/openai/openai_codex_responses.fnl:58

fen.extensions.provider_openai.openai_codex_responses.map-codex-event

(map-codex-event ev)

Codex emits response.done and response.incomplete aliases for

extensions/adapters/providers/openai/openai_codex_responses.fnl:113

fen.extensions.provider_openai.openai_codex_responses.build-headers

(build-headers creds) -> table

Build ChatGPT Codex streaming request headers from OAuth credentials, including account id, beta flag, and user agent.

tags: codex, provider, responses, http

extensions/adapters/providers/openai/openai_codex_responses.fnl:99

fen.extensions.provider_openai.openai_codex_responses.detect-user-agent

(detect-user-agent)

Best-effort pi (linux ${release}; ${arch}). Falls back to pi (lua)

extensions/adapters/providers/openai/openai_codex_responses.fnl:78

fen.extensions.provider_openai.openai_codex_responses.merge-options

(merge-options opts)

Set Codex-specific defaults onto the per-call options table without

extensions/adapters/providers/openai/openai_codex_responses.fnl:136

fen.extensions.provider_openai.openai_codex_responses.parse-models

(parse-models decoded)

Keep only list-visible models supported by the Codex Responses API. Hidden

extensions/adapters/providers/openai/openai_codex_responses.fnl:155

fen.extensions.provider_openai.openai_codex_responses.append-pinned-models

(append-pinned-models models catalog-models)

Append known Codex models absent from the authenticated catalog.

extensions/adapters/providers/openai/openai_codex_responses.fnl:170

fen.extensions.provider_openai.openai_codex_responses.pinned-models

string

Default ChatGPT backend API root used by the Codex Responses adapter before appending /codex/responses.

tags: codex, provider, responses, metadata

extensions/adapters/providers/openai/openai_codex_responses.fnl:349

fen.extensions.provider_openai.openai_codex_responses.list-models

(list-models opts) -> [{:id string}]

Fetch the authenticated ChatGPT/Codex model catalog.

tags: codex, provider, models, http

extensions/adapters/providers/openai/openai_codex_responses.fnl:245

fen.extensions.provider_openai.openai_codex_responses.complete

(complete model context options ?on-event ?yield-fn)

Single entry. Drives the same Codex SSE pipeline regardless of caller —

extensions/adapters/providers/openai/openai_codex_responses.fnl:272

fen.extensions.provider_openai.openai_completions

Module neighborhood graph: DOT · SVG

fen.extensions.provider_openai.openai_completions module graph

fen.extensions.provider_openai.openai_completions.api

keyword

Provider API family keyword used by registry metadata for the Chat Completions adapter.

tags: provider, openai, completions, metadata

extensions/adapters/providers/openai/openai_completions.fnl:793

fen.extensions.provider_openai.openai_completions.provider

keyword

Provider owner keyword used on canonical assistant messages emitted by the Chat Completions adapter.

tags: provider, openai, completions, metadata

extensions/adapters/providers/openai/openai_completions.fnl:798

fen.extensions.provider_openai.openai_completions.default-base-url

string

Default OpenAI v1 API root used when models.json or provider options do not override the base URL.

tags: provider, openai, completions, metadata

extensions/adapters/providers/openai/openai_completions.fnl:803

fen.extensions.provider_openai.openai_completions.build-url

(build-url base-url)

Mirror pi-mono's models.json convention: baseUrl is the v1 root

extensions/adapters/providers/openai/openai_completions.fnl:48

fen.extensions.provider_openai.openai_completions.convert-messages

(convert-messages messages system-prompt compat ?flavor)

Canonical Messages + optional system prompt → OpenAI ChatCompletionMessageParam[].

extensions/adapters/providers/openai/openai_completions.fnl:176

fen.extensions.provider_openai.openai_completions.convert-tools

(convert-tools tools)

Canonical Tool[] → OpenAI tool-function[].

extensions/adapters/providers/openai/openai_completions.fnl:198

fen.extensions.provider_openai.openai_completions.map-stop-reason

(map-stop-reason reason)

OpenAI finish_reason → canonical StopReason. Mirrors pi-mono

extensions/adapters/providers/openai/openai_completions.fnl:213

fen.extensions.provider_openai.openai_completions.parse-response

(parse-response resp model ?flavor)

OpenAI response → canonical AssistantMessage.

extensions/adapters/providers/openai/openai_completions.fnl:323

fen.extensions.provider_openai.openai_completions.process-stream-chunk!

(process-stream-chunk! state chunk emit)

Consume one decoded OpenAI ChatCompletionChunk-like table.

extensions/adapters/providers/openai/openai_completions.fnl:634

fen.extensions.provider_openai.openai_completions.new-stream-state

string

Default OpenAI v1 API root used when models.json or provider options do not override the base URL.

tags: provider, openai, completions, metadata

extensions/adapters/providers/openai/openai_completions.fnl:803

fen.extensions.provider_openai.openai_completions.finalize-stream-state

(finalize-stream-state state emit) -> AssistantMessage

Close the streaming content block state, infer tool-use stops, emit the terminal event, and return the canonical assistant message.

tags: provider, openai, completions, streaming

extensions/adapters/providers/openai/openai_completions.fnl:710

fen.extensions.provider_openai.openai_completions.finalize-stream

(finalize-stream state parser parser-error model resp on-event)

Shared post-request handling for the streaming pipeline.

extensions/adapters/providers/openai/openai_completions.fnl:742

fen.extensions.provider_openai.openai_completions.build-body

(build-body model context max-tokens compat options ?flavor)

Build the chat-completions request body. compat is an optional table of

extensions/adapters/providers/openai/openai_completions.fnl:417

fen.extensions.provider_openai.openai_completions.build-request-opts

(build-request-opts model context options ?on-chunk ?flavor)

Assemble a fen.util.http opts table for a Chat Completions POST. When

extensions/adapters/providers/openai/openai_completions.fnl:450

fen.extensions.provider_openai.openai_completions.list-models

string

Default OpenAI v1 API root used when models.json or provider options do not override the base URL.

tags: provider, openai, completions, metadata

extensions/adapters/providers/openai/openai_completions.fnl:803

fen.extensions.provider_openai.openai_completions.complete-with

(complete-with flavor model context options ?on-event ?yield-fn)

complete for an OpenAI-compatible flavor (see OPENAI-FLAVOR). Adapters

extensions/adapters/providers/openai/openai_completions.fnl:756

fen.extensions.provider_openai.openai_completions.complete

(complete model context options ?on-event ?yield-fn)

Single entry. Routes by ?on-event / ?yield-fn:

extensions/adapters/providers/openai/openai_completions.fnl:783

fen.extensions.provider_openai.openai_model_catalog

Module neighborhood graph: DOT · SVG

fen.extensions.provider_openai.openai_model_catalog module graph

fen.extensions.provider_openai.openai_model_catalog.list-models

extensions/adapters/providers/openai/openai_model_catalog.fnl:49

fen.extensions.provider_openai.openai_model_catalog.models-url

extensions/adapters/providers/openai/openai_model_catalog.fnl:49

fen.extensions.provider_openai.openai_responses

Module neighborhood graph: DOT · SVG

fen.extensions.provider_openai.openai_responses module graph

fen.extensions.provider_openai.openai_responses.api

keyword

Provider API family keyword used by registry metadata for the OpenAI Responses adapter.

tags: provider, openai, responses, metadata

extensions/adapters/providers/openai/openai_responses.fnl:110

fen.extensions.provider_openai.openai_responses.provider

keyword

Provider owner keyword used on canonical assistant messages emitted by the Responses adapter.

tags: provider, openai, responses, metadata

extensions/adapters/providers/openai/openai_responses.fnl:115

fen.extensions.provider_openai.openai_responses.default-base-url

string

Default OpenAI v1 API root used by the Responses adapter before appending /responses.

tags: provider, openai, responses, metadata

extensions/adapters/providers/openai/openai_responses.fnl:120

fen.extensions.provider_openai.openai_responses.build-url

(build-url base-url) -> string

Normalize an OpenAI base URL into the /responses endpoint while preserving already-qualified Responses URLs.

tags: provider, openai, responses, http

extensions/adapters/providers/openai/openai_responses.fnl:43

fen.extensions.provider_openai.openai_responses.build-body

(build-body model context max-tokens options)

Build a vanilla OpenAI Responses request body through the shared

extensions/adapters/providers/openai/openai_responses.fnl:62

fen.extensions.provider_openai.openai_responses.build-request-opts

(build-request-opts model context options on-chunk)

Assemble a fen.util.http opts table for a vanilla OpenAI Responses POST via

extensions/adapters/providers/openai/openai_responses.fnl:69

fen.extensions.provider_openai.openai_responses.make-stream-pipeline

(make-stream-pipeline model on-event event-mapper)

Delegate parser/reducer setup to the OpenAI-compatible shared helper.

extensions/adapters/providers/openai/openai_responses.fnl:76

fen.extensions.provider_openai.openai_responses.finalize-stream

(finalize-stream state parser parser-error model resp on-event ?request-opts)

Delegate to the shared Responses finalizer with this module's API/provider

extensions/adapters/providers/openai/openai_responses.fnl:80

fen.extensions.provider_openai.openai_responses.merge-options

(merge-options opts)

Return a copy of per-call options with vanilla Responses defaults applied.

extensions/adapters/providers/openai/openai_responses.fnl:51

fen.extensions.provider_openai.openai_responses.list-models

string

Default OpenAI v1 API root used by the Responses adapter before appending /responses.

tags: provider, openai, responses, metadata

extensions/adapters/providers/openai/openai_responses.fnl:120

fen.extensions.provider_openai.openai_responses.complete

(complete model context options ?on-event ?yield-fn)

Single entry. Always streams under the hood; transports differ —

extensions/adapters/providers/openai/openai_responses.fnl:92

fen.extensions.provider_openai.openai_responses_shared

Module neighborhood graph: DOT · SVG

fen.extensions.provider_openai.openai_responses_shared module graph

fen.extensions.provider_openai.openai_responses_shared.build-url

(build-url base-url responses-path) -> string

Normalize an OpenAI-compatible base URL into a Responses endpoint while preserving already-qualified URLs.

tags: provider, openai, responses, http

extensions/adapters/providers/openai/openai_responses_shared.fnl:1009

fen.extensions.provider_openai.openai_responses_shared.build-body

(build-body model context max-tokens options ?id)

Build a Responses request body. The system prompt rides in instructions,

extensions/adapters/providers/openai/openai_responses_shared.fnl:1019

fen.extensions.provider_openai.openai_responses_shared.build-request-opts

(build-request-opts model context options on-chunk ?headers-override ?url-override default-base-url responses-path ?id) -> table

Assemble fen.util.http options for a streaming OpenAI-compatible Responses POST.

tags: provider, openai, responses, http

extensions/adapters/providers/openai/openai_responses_shared.fnl:1099

fen.extensions.provider_openai.openai_responses_shared.make-stream-pipeline

(make-stream-pipeline model on-event event-mapper)

Build a fresh (state parser parser-error) tuple for one streaming POST.

extensions/adapters/providers/openai/openai_responses_shared.fnl:1073

fen.extensions.provider_openai.openai_responses_shared.finalize-stream

(finalize-stream state parser parser-error api provider model resp on-event) -> AssistantMessage

Finish a Responses SSE stream, preserving the calling provider's canonical API/provider identity.

tags: provider, openai, responses, streaming

extensions/adapters/providers/openai/openai_responses_shared.fnl:1132

fen.extensions.provider_openai.openai_responses_shared.convert-messages

(convert-messages messages ?id)

Canonical Messages → Responses ResponseInput list. The system prompt

extensions/adapters/providers/openai/openai_responses_shared.fnl:400

fen.extensions.provider_openai.openai_responses_shared.convert-tools

(convert-tools tools)

Canonical Tool[] → Responses tools[]. No function:{...} wrapper, unlike

extensions/adapters/providers/openai/openai_responses_shared.fnl:487

fen.extensions.provider_openai.openai_responses_shared.map-stop-reason

(map-stop-reason status)

Responses API ResponseStatus → canonical StopReason.

extensions/adapters/providers/openai/openai_responses_shared.fnl:516

fen.extensions.provider_openai.openai_responses_shared.new-stream-state

(new-stream-state model) -> table

Initialize the mutable reducer state used while folding Responses SSE events into canonical assistant content.

tags: provider, openai, responses, streaming

extensions/adapters/providers/openai/openai_responses_shared.fnl:536

fen.extensions.provider_openai.openai_responses_shared.process-event!

(process-event! state event emit)

Dispatch one decoded Responses event into the reducer state.

extensions/adapters/providers/openai/openai_responses_shared.fnl:940

fen.extensions.provider_openai.openai_responses_shared.finalize-stream-state

(finalize-stream-state state api provider emit) -> AssistantMessage

Finalize Responses reducer state into a canonical assistant message and emit the terminal done/error event.

tags: provider, openai, responses, streaming

extensions/adapters/providers/openai/openai_responses_shared.fnl:987

fen.extensions.provider_openai.openai_responses_shared.finish-current-block!

(finish-current-block! state emit) -> nil

Close the active text/thinking/tool-call block, emit the matching end event, and clear current item pointers.

tags: provider, openai, responses, streaming

extensions/adapters/providers/openai/openai_responses_shared.fnl:562

fen.extensions.provider_openai.openai_responses_shared.write-failure-diagnostic!

(write-failure-diagnostic! api provider model resp ?request-opts reason)

Persist a redacted provider failure diagnostic and return its path.

extensions/adapters/providers/openai/openai_responses_shared.fnl:242

fen.extensions.provider_openai.openai_responses_shared.failure-diagnostic

(failure-diagnostic api provider model resp ?request-opts reason)

Build a JSON-serializable provider failure diagnostic. The default body

extensions/adapters/providers/openai/openai_responses_shared.fnl:216

fen.extensions.provider_openai.openai_responses_shared.attach-diagnostic!

(attach-diagnostic! asst path)

Append a diagnostic file path to a provider error AssistantMessage.

extensions/adapters/providers/openai/openai_responses_shared.fnl:270

fen.extensions.provider_openai.openai_responses_shared.redact-headers

(redact-headers headers)

Copy HTTP headers with credentials/account identifiers redacted.

extensions/adapters/providers/openai/openai_responses_shared.fnl:61

fen.extensions.provider_openai.openai_responses_shared.summarize-body

(summarize-body body)

Summarize a Responses request body without prompt/tool-result text.

extensions/adapters/providers/openai/openai_responses_shared.fnl:153

fen.extensions.provider_openai.openai_responses_shared.clamp-reasoning-effort

(clamp-reasoning-effort model effort) -> keyword

Apply Codex/OpenAI per-model reasoning-effort limits so request bodies avoid unsupported effort values.

tags: provider, openai, codex, reasoning

extensions/adapters/providers/openai/openai_responses_shared.fnl:1209

fen.extensions.provider_openai.openai_responses_shared.split-compound-id

(split-compound-id id)

Tool call ids are stored canonically as call_id|item_id because the

extensions/adapters/providers/openai/openai_responses_shared.fnl:293

fen.extensions.provider_openai.openai_responses_shared.parse-streaming-json

(parse-streaming-json s)

Best-effort parse: returns {} for nil/empty/invalid JSON during streaming.

extensions/adapters/providers/openai/openai_responses_shared.fnl:528

fen.extensions.provider_openai.usage

Module neighborhood graph: DOT · SVG

fen.extensions.provider_openai.usage module graph

fen.extensions.provider_openai.usage.parse

[body]

extensions/adapters/providers/openai/usage.fnl:27

fen.extensions.provider_openai.usage.cache-path

[]

extensions/adapters/providers/openai/usage.fnl:58

fen.extensions.provider_openai.usage.load-cache

[key ?force]

extensions/adapters/providers/openai/usage.fnl:79

fen.extensions.provider_openai.usage.save-cache

[]

extensions/adapters/providers/openai/usage.fnl:137

fen.extensions.provider_openai.usage.snapshot

[]

extensions/adapters/providers/openai/usage.fnl:167

fen.extensions.provider_openai.usage.record-limit

[details account-id ?yield]

extensions/adapters/providers/openai/usage.fnl:230

fen.extensions.provider_openai.usage.refresh

[?yield]

extensions/adapters/providers/openai/usage.fnl:257

fen.extensions.provider_openai.usage.label

[w]

extensions/adapters/providers/openai/usage.fnl:301

fen.extensions.provider_openai.usage.remaining

[w now]

extensions/adapters/providers/openai/usage.fnl:309

fen.extensions.provider_openai.usage.style

[remaining stale?]

extensions/adapters/providers/openai/usage.fnl:312

fen.extensions.provider_openai.usage.status

[snapshot width now]

extensions/adapters/providers/openai/usage.fnl:318

fen.extensions.provider_openai.usage.relative

[seconds]

extensions/adapters/providers/openai/usage.fnl:339

fen.extensions.provider_openai.usage.rows

[snapshot width now]

extensions/adapters/providers/openai/usage.fnl:348

fen.extensions.provider_openai.usage.register

[api]

extensions/adapters/providers/openai/usage.fnl:414

fen.extensions.provider_openai.usage_state

Module neighborhood graph: DOT · SVG

fen.extensions.provider_openai.usage_state module graph

fen.extensions.provider_openai.usage_state.windows

extensions/adapters/providers/openai/usage_state.fnl:2

fen.extensions.provider_openai.usage_state.retrieved-at

extensions/adapters/providers/openai/usage_state.fnl:2

fen.extensions.provider_openai.usage_state.attempted-at

extensions/adapters/providers/openai/usage_state.fnl:2

fen.extensions.provider_openai.usage_state.failure

extensions/adapters/providers/openai/usage_state.fnl:2

fen.extensions.provider_openai.usage_state.unavailable

extensions/adapters/providers/openai/usage_state.fnl:2

fen.extensions.provider_openai.usage_state.account-key

extensions/adapters/providers/openai/usage_state.fnl:2

fen.extensions.provider_openai.usage_state.file-sig

extensions/adapters/providers/openai/usage_state.fnl:2

fen.extensions.provider_openai.usage_state.last-llm-provider

extensions/adapters/providers/openai/usage_state.fnl:2

fen.extensions.provider_openai.usage_state.visible?

extensions/adapters/providers/openai/usage_state.fnl:2

fen.extensions.provider_openai.usage_state.refresh-co

extensions/adapters/providers/openai/usage_state.fnl:2

fen.extensions.provider_openrouter

Module neighborhood graph: DOT · SVG

fen.extensions.provider_openrouter module graph

fen.extensions.provider_openrouter.register

[api]

extensions/adapters/providers/openrouter/init.fnl:22

fen.extensions.provider_openrouter.openrouter_completions

Module neighborhood graph: DOT · SVG

fen.extensions.provider_openrouter.openrouter_completions module graph

fen.extensions.provider_openrouter.openrouter_completions.api

keyword

Provider API keyword (openrouter-completions); models.json providers with this api delegate to the OpenRouter adapter.

tags: openrouter, provider, metadata

extensions/adapters/providers/openrouter/openrouter_completions.fnl:305

fen.extensions.provider_openrouter.openrouter_completions.provider

keyword

Provider owner keyword used on canonical assistant messages emitted by the OpenRouter adapter.

tags: openrouter, provider, metadata

extensions/adapters/providers/openrouter/openrouter_completions.fnl:310

fen.extensions.provider_openrouter.openrouter_completions.default-base-url

[{:id string}]

Curated tool-capable OpenRouter model ids; the first entry is the provider default.

tags: openrouter, provider, models

extensions/adapters/providers/openrouter/openrouter_completions.fnl:315

fen.extensions.provider_openrouter.openrouter_completions.models

[{:id string}]

Curated tool-capable OpenRouter model ids; the first entry is the provider default.

tags: openrouter, provider, models

extensions/adapters/providers/openrouter/openrouter_completions.fnl:315

fen.extensions.provider_openrouter.openrouter_completions.reasoning-config

(reasoning-config options) -> table|nil

Map fen thinking options to OpenRouter's normalized reasoning object; thinking-budget beats reasoning-effort beats thinking-level, only reasoning-effort none/off disables, and nil (including thinking-level off) leaves the model default.

tags: openrouter, provider, reasoning, thinking

extensions/adapters/providers/openrouter/openrouter_completions.fnl:77

fen.extensions.provider_openrouter.openrouter_completions.cache-breakpoints?

(cache-breakpoints? model) -> boolean

True for Anthropic and Google models, whose upstreams only prompt-cache at explicit cache_control breakpoints.

tags: openrouter, provider, caching

extensions/adapters/providers/openrouter/openrouter_completions.fnl:106

fen.extensions.provider_openrouter.openrouter_completions.add-cache-breakpoints!

(add-cache-breakpoints! messages) -> messages

Mark the system prompt and the latest user/tool message with ephemeral cache_control breakpoints (two of Anthropic's four).

tags: openrouter, provider, caching

extensions/adapters/providers/openrouter/openrouter_completions.fnl:136

fen.extensions.provider_openrouter.openrouter_completions.patch-headers

(patch-headers headers opts streaming?) -> table

Add OpenRouter app attribution headers (HTTP-Referer, X-OpenRouter-Title, X-OpenRouter-Categories) to a Chat Completions request.

tags: openrouter, provider, http

extensions/adapters/providers/openrouter/openrouter_completions.fnl:158

fen.extensions.provider_openrouter.openrouter_completions.patch-body

(patch-body body model context opts streaming?) -> table

Apply OpenRouter request policy to a Chat Completions body: reasoning object (omitted for models the live catalog marks as non-reasoning), require_parameters routing, sticky session_id, and cache_control breakpoints.

tags: openrouter, provider, http, reasoning, caching

extensions/adapters/providers/openrouter/openrouter_completions.fnl:169

fen.extensions.provider_openrouter.openrouter_completions.build-request-opts

(build-request-opts model context options ?on-chunk) -> table

Assemble the fen.util.http opts for an OpenRouter Chat Completions POST (streaming when ?on-chunk is given).

tags: openrouter, provider, http

extensions/adapters/providers/openrouter/openrouter_completions.fnl:209

fen.extensions.provider_openrouter.openrouter_completions.curate-models

(curate-models decoded wanted declared?) -> [{:id string :context-window number? :reasoning? boolean?}]

Match wanted model ids against a decoded /models catalog in wanted order, enriched with context length and reasoning support; the curated list keeps only live ids, a declared (models.json) list keeps every id.

tags: openrouter, provider, models

extensions/adapters/providers/openrouter/openrouter_completions.fnl:251

fen.extensions.provider_openrouter.openrouter_completions.list-models

(list-models opts) -> [{:id string :context-window number? :reasoning? boolean?}]

Fetch OpenRouter's /models catalog and return the configured ids: every id of a models.json override (opts.models), else the curated ids that are live.

tags: openrouter, provider, models, http

extensions/adapters/providers/openrouter/openrouter_completions.fnl:275

fen.extensions.provider_openrouter.openrouter_completions.complete

(complete model context options ?on-event ?yield-fn)

Streams when ?on-event is given, else a single POST; cooperative when

extensions/adapters/providers/openrouter/openrouter_completions.fnl:217

fen.extensions.provider_sakana

Module neighborhood graph: DOT · SVG

fen.extensions.provider_sakana module graph

fen.extensions.provider_sakana.register

[api]

extensions/adapters/providers/sakana/init.fnl:27

fen.extensions.provider_sakana.sakana_responses

Module neighborhood graph: DOT · SVG

fen.extensions.provider_sakana.sakana_responses module graph

fen.extensions.provider_sakana.sakana_responses.api

keyword

Provider API family keyword (openai-responses) used by registry metadata for the Sakana adapter.

tags: sakana, provider, responses, metadata

extensions/adapters/providers/sakana/sakana_responses.fnl:202

fen.extensions.provider_sakana.sakana_responses.provider

keyword

Provider owner keyword used on canonical assistant messages emitted by the Sakana adapter.

tags: sakana, provider, responses, metadata

extensions/adapters/providers/sakana/sakana_responses.fnl:207

fen.extensions.provider_sakana.sakana_responses.default-base-url

string

Default Sakana API root used before appending /responses.

tags: sakana, provider, responses, metadata

extensions/adapters/providers/sakana/sakana_responses.fnl:212

fen.extensions.provider_sakana.sakana_responses.build-url

(build-url base-url) -> string

Normalize a Sakana base URL into the /responses endpoint while preserving already-qualified Responses URLs.

tags: sakana, provider, responses, http

extensions/adapters/providers/sakana/sakana_responses.fnl:32

fen.extensions.provider_sakana.sakana_responses.build-models-url

(build-models-url base-url) -> string

Normalize a Sakana base URL into the /models catalog endpoint.

tags: sakana, provider, models, http

extensions/adapters/providers/sakana/sakana_responses.fnl:40

fen.extensions.provider_sakana.sakana_responses.clamp-reasoning-effort

(clamp-reasoning-effort effort)

Sakana rejects every reasoning effort except high and xhigh. Map

extensions/adapters/providers/sakana/sakana_responses.fnl:58

fen.extensions.provider_sakana.sakana_responses.request-headers

(request-headers api-key) -> table

Build Sakana streaming request headers, adding an Authorization Bearer line only when an API key is present.

tags: sakana, provider, responses, http

extensions/adapters/providers/sakana/sakana_responses.fnl:67

fen.extensions.provider_sakana.sakana_responses.parse-models

(parse-models decoded)

Accept the standard OpenAI-compatible {data:[{id}]} shape, plus a tolerant

extensions/adapters/providers/sakana/sakana_responses.fnl:81

fen.extensions.provider_sakana.sakana_responses.list-models

(list-models opts) -> [{:id string}]

Fetch Sakana's authenticated model catalog from /v1/models.

tags: sakana, provider, models, http

extensions/adapters/providers/sakana/sakana_responses.fnl:92

fen.extensions.provider_sakana.sakana_responses.merge-options

(merge-options opts)

Return a copy of the per-call options with Sakana's constraints applied,

extensions/adapters/providers/sakana/sakana_responses.fnl:132

fen.extensions.provider_sakana.sakana_responses.complete

(complete model context options ?on-event ?yield-fn)

Single entry. Always streams under the hood; blocking when no yield-fn is

extensions/adapters/providers/sakana/sakana_responses.fnl:150

fen.extensions.provider_shared

Module neighborhood graph: DOT · SVG

fen.extensions.provider_shared module graph

fen.extensions.provider_shared.register

[_api]

extensions/adapters/providers/shared/init.fnl:11

fen.extensions.provider_shared.retry

Module neighborhood graph: DOT · SVG

fen.extensions.provider_shared.retry module graph

fen.extensions.provider_shared.retry.DEFAULT-MAX-ATTEMPTS

number

Default maximum number of provider HTTP attempts, including the initial try and transient retries.

tags: llm, retry, defaults

extensions/adapters/providers/shared/retry.fnl:9

fen.extensions.provider_shared.retry.DEFAULT-BASE-DELAY-MS

number

Default base delay in milliseconds used as the first exponential-backoff jitter cap.

tags: llm, retry, defaults

extensions/adapters/providers/shared/retry.fnl:16

fen.extensions.provider_shared.retry.DEFAULT-MAX-DELAY-MS

number

Default maximum jitter cap in milliseconds for provider retry backoff delays.

tags: llm, retry, defaults

extensions/adapters/providers/shared/retry.fnl:23

fen.extensions.provider_shared.retry.transient?

(transient? status err-message ?curl-code)

True when a provider HTTP/transport failure is worth retrying.

extensions/adapters/providers/shared/retry.fnl:64

fen.extensions.provider_shared.retry.mark-incomplete-stream

(mark-incomplete-stream resp incomplete?)

Tag a clean 2xx streaming response that ended without a terminal event so

extensions/adapters/providers/shared/retry.fnl:162

fen.extensions.provider_shared.retry.options

(options provider ?opts ?on-event)

Build with-retry options shared by provider adapters.

extensions/adapters/providers/shared/retry.fnl:177

fen.extensions.provider_shared.retry.parse-retry-after

(parse-retry-after headers)

Return delay-ms from Retry-After/retry-after-ms headers, or nil.

extensions/adapters/providers/shared/retry.fnl:111

fen.extensions.provider_shared.retry.backoff-delay

(backoff-delay attempt base-ms max-ms)

Exponential backoff with full jitter.

extensions/adapters/providers/shared/retry.fnl:124

fen.extensions.provider_shared.retry.with-retry

(with-retry opts make-request ?yield!)

Run make-request with conservative retry on transient HTTP/transport errors.

extensions/adapters/providers/shared/retry.fnl:199

fen.extensions.provider_shared.streaming

Module neighborhood graph: DOT · SVG

fen.extensions.provider_shared.streaming module graph

fen.extensions.provider_shared.streaming.make-stream-pipeline

(make-stream-pipeline config)

Build a fresh (state parser parser-error) tuple.

extensions/adapters/providers/shared/streaming.fnl:32

fen.extensions.provider_shared.streaming.build-request-opts

(build-request-opts spec model context options ?on-chunk)

Assemble a fen.util.http opts table for a provider POST.

extensions/adapters/providers/shared/streaming.fnl:46

fen.extensions.provider_shared.streaming.finalize-stream-state

(finalize-stream-state config)

Shared reducer-state finalization for streaming providers.

extensions/adapters/providers/shared/streaming.fnl:67

fen.extensions.provider_shared.streaming.finalize-stream

(finalize-stream config)

Shared post-request handling for streaming pipelines.

extensions/adapters/providers/shared/streaming.fnl:93

fen.extensions.provider_shared.streaming.complete-streaming

(complete-streaming config)

Shared provider entry loop for adapters that always stream, even when the

extensions/adapters/providers/shared/streaming.fnl:133

fen.extensions.provider_shared.streaming.complete

(complete config)

Shared provider entry loop.

extensions/adapters/providers/shared/streaming.fnl:169

fen.extensions.queue

Module neighborhood graph: DOT · SVG

fen.extensions.queue module graph

fen.extensions.queue.register

[api]

extensions/behaviors/inspectors/queue/init.fnl:7

fen.extensions.queue.commands.queue

Module neighborhood graph: DOT · SVG

fen.extensions.queue.commands.queue module graph

fen.extensions.queue.commands.queue.register

(register api) -> nil

Register queue management commands and the queue panel for pending steering/follow-up lines.

tags: commands, queue, register

extensions/behaviors/inspectors/queue/commands/queue.fnl:148

fen.extensions.queue.state.queue

Module neighborhood graph: DOT · SVG

fen.extensions.queue.state.queue module graph

fen.extensions.queue.state.queue.visible?

boolean

Visibility flag for the persistent /queue panel showing queued steering and follow-up input.

tags: builtin, commands, state, queue, panel

extensions/behaviors/inspectors/queue/state/queue.fnl:3

fen.extensions.queue.state.queue.cached-rows

[PresenterRow]|nil

Cached rendered /queue panel rows reused while queue state and terminal width remain stable.

tags: builtin, commands, state, queue, cache

extensions/behaviors/inspectors/queue/state/queue.fnl:9

fen.extensions.queue.state.queue.cached-at

number

Timestamp for the /queue panel cache, supporting throttled refreshes during frequent repaints.

tags: builtin, commands, state, queue, cache

extensions/behaviors/inspectors/queue/state/queue.fnl:15

fen.extensions.queue.state.queue.cached-w

number

Terminal width associated with cached /queue rows so resize events rebuild wrapped queue entries.

tags: builtin, commands, state, queue, cache

extensions/behaviors/inspectors/queue/state/queue.fnl:21

fen.extensions.rpc

Module neighborhood graph: DOT · SVG

fen.extensions.rpc module graph

fen.extensions.rpc.forward!

(forward! ch ev)

Forward a bus event when it is a wire display event type.

extensions/adapters/presenters/rpc/init.fnl:64

fen.extensions.rpc.init

(init ctx)

Open the channel before startup events so agent-started is forwarded.

extensions/adapters/presenters/rpc/init.fnl:322

fen.extensions.rpc.shutdown

[ctx]

extensions/adapters/presenters/rpc/init.fnl:332

fen.extensions.rpc.run

(run ctx) -> exit-code

Serve one live wire-protocol run: emit ready, apply parent controls through the fen.util.wire_session table while stepping the agent cooperatively, and return 0 after exit done or 1 after any other exit status.

tags: rpc, presenter, wire, subagent

extensions/adapters/presenters/rpc/init.fnl:340

fen.extensions.rpc.register

[api]

extensions/adapters/presenters/rpc/init.fnl:361

fen.extensions.session_jsonl

Module neighborhood graph: DOT · SVG

fen.extensions.session_jsonl module graph

fen.extensions.session_jsonl.register

[api]

extensions/adapters/session-backends/jsonl/init.fnl:7

fen.extensions.session_jsonl.session

Module neighborhood graph: DOT · SVG

fen.extensions.session_jsonl.session module graph

fen.extensions.session_jsonl.session.open

(open cwd ?opts)

Pick a future session path under sessions-root(cwd), but do not create the

extensions/adapters/session-backends/jsonl/session.fnl:270

fen.extensions.session_jsonl.session.create

(create cwd) -> Session|nil

Create a durable header-only session which can be addressed before its first turn.

tags: session, jsonl, create

extensions/adapters/session-backends/jsonl/session.fnl:306

fen.extensions.session_jsonl.session.open-existing

(open-existing p ?yield-fn)

Open an existing session JSONL for append without writing a duplicate

extensions/adapters/session-backends/jsonl/session.fnl:658

fen.extensions.session_jsonl.session.append

(append session msg)

Append one canonical AgentMessage as a :message entry.

extensions/adapters/session-backends/jsonl/session.fnl:350

fen.extensions.session_jsonl.session.append-entry

(append-entry session entry)

Append one JSONL session entry. Missing :id, :parent-id, and :timestamp

extensions/adapters/session-backends/jsonl/session.fnl:319

fen.extensions.session_jsonl.session.latest-extension-state

(latest-extension-state session extension ?yield-fn ?accept) -> entry|nil

Return the latest accepted extension-owned state entry from cooperatively cached session metadata, falling back to a disk scan for an older accepted entry when the cached latest one is rejected by ?accept, warning and ignoring malformed entries.

tags: session, jsonl, extensions, state, replay

extensions/adapters/session-backends/jsonl/session.fnl:709

fen.extensions.session_jsonl.session.close

(close session) -> nil

Close an open session file handle and clear it from the mutable session record.

tags: session, jsonl, close

extensions/adapters/session-backends/jsonl/session.fnl:359

fen.extensions.session_jsonl.session.latest-for-cwd

(latest-for-cwd cwd ?yield-fn)

Return the newest non-empty session path for cwd, or nil if none.

extensions/adapters/session-backends/jsonl/session.fnl:500

fen.extensions.session_jsonl.session.list-for-cwd

(list-for-cwd cwd limit ?yield-fn)

Return recent session metadata records for cwd, newest first. Durable

extensions/adapters/session-backends/jsonl/session.fnl:556

fen.extensions.session_jsonl.session.get

(get cwd id) -> SessionInfo|nil

Resolve only a complete session id in the requested cwd.

tags: session, jsonl, exact, discovery

extensions/adapters/session-backends/jsonl/session.fnl:575

fen.extensions.session_jsonl.session.acquire-lock

(acquire-lock SessionInfo) -> release-fn|nil

Atomically acquire a per-session mutation lock, reclaiming one left by a dead owner and returning nil when another process owns it.

tags: session, jsonl, concurrency

extensions/adapters/session-backends/jsonl/session.fnl:643

fen.extensions.session_jsonl.session.header

(header p ?yield-fn)

Read and decode the first JSONL header entry from p, or nil.

extensions/adapters/session-backends/jsonl/session.fnl:512

fen.extensions.session_jsonl.session.title

(title p ?yield-fn)

Return a human title for a transcript: first user text, falling back to

extensions/adapters/session-backends/jsonl/session.fnl:534

fen.extensions.session_jsonl.session.message-count

(message-count p) -> number

Count valid :message entries in a session JSONL file while skipping the header and malformed lines.

tags: session, jsonl, inspect

extensions/adapters/session-backends/jsonl/session.fnl:492

fen.extensions.session_jsonl.session.find

(find cwd target ?yield-fn)

Resolve a session target for cwd. Target may be nil/latest, a 0-based

extensions/adapters/session-backends/jsonl/session.fnl:668

fen.extensions.session_jsonl.session.doctor

(doctor p ?repair? ?yield-fn)

Inspect a JSONL transcript without replaying it. With repair enabled, write

extensions/adapters/session-backends/jsonl/session.fnl:825

fen.extensions.session_jsonl.session.transcript

(transcript path) -> [Message]

Return persisted canonical messages without applying replay compaction.

tags: session, jsonl, inspect

extensions/adapters/session-backends/jsonl/session.fnl:764

fen.extensions.session_jsonl.session.transcript-strict

number

Current JSONL session format version written into new session headers.

tags: session, jsonl, metadata

extensions/adapters/session-backends/jsonl/session.fnl:1049

fen.extensions.session_jsonl.session.load

(load path ?yield-fn ?strict?)

Read the JSONL at path and return replayable canonical messages. Header

extensions/adapters/session-backends/jsonl/session.fnl:777

fen.extensions.session_jsonl.session.load-strict

number

Current JSONL session format version written into new session headers.

tags: session, jsonl, metadata

extensions/adapters/session-backends/jsonl/session.fnl:1049

fen.extensions.session_jsonl.session.sessions-root

(sessions-root cwd) -> string

Return the state-directory path containing JSONL sessions for a specific cwd.

tags: session, jsonl, paths

extensions/adapters/session-backends/jsonl/session.fnl:50

fen.extensions.session_jsonl.session.cwd-slug

(cwd-slug cwd) -> string

Convert a cwd into the pi-mono-style session directory slug used under the fen sessions root.

tags: session, jsonl, paths

extensions/adapters/session-backends/jsonl/session.fnl:37

fen.extensions.session_jsonl.session.VERSION

number

Current JSONL session format version written into new session headers.

tags: session, jsonl, metadata

extensions/adapters/session-backends/jsonl/session.fnl:1049

fen.extensions.session_jsonl.state

Module neighborhood graph: DOT · SVG

fen.extensions.session_jsonl.state module graph

fen.extensions.session_jsonl.state.record-cache

extensions/adapters/session-backends/jsonl/state.fnl:12

fen.extensions.session_jsonl.state.cache-cap

extensions/adapters/session-backends/jsonl/state.fnl:12

fen.extensions.session_jsonl.state.cache-clock

extensions/adapters/session-backends/jsonl/state.fnl:12

fen.extensions.sessions

Module neighborhood graph: DOT · SVG

fen.extensions.sessions module graph

fen.extensions.sessions.register

[api]

extensions/behaviors/actions/sessions/init.fnl:7

fen.extensions.sessions.commands.session

Module neighborhood graph: DOT · SVG

fen.extensions.sessions.commands.session module graph

fen.extensions.sessions.commands.session.register

(register api) -> nil

Register conversation/session lifecycle commands including /new, /reload, /sessions, and /resume aliases.

tags: commands, session, register

extensions/behaviors/actions/sessions/commands/session.fnl:530

fen.extensions.simplify

Module neighborhood graph: DOT · SVG

fen.extensions.simplify module graph

fen.extensions.simplify.register

extensions/behaviors/companions/simplify/init.fnl:267

fen.extensions.simplify.register!

extensions/behaviors/companions/simplify/init.fnl:268

fen.extensions.simplify._state

extensions/behaviors/companions/simplify/init.fnl:269

fen.extensions.simplify.state

Module neighborhood graph: DOT · SVG

fen.extensions.simplify.state module graph

fen.extensions.simplify.state.status

extensions/behaviors/companions/simplify/state.fnl:3

fen.extensions.simplify.state.idle

extensions/behaviors/companions/simplify/state.fnl:3

fen.extensions.simplify.state.last-summary

extensions/behaviors/companions/simplify/state.fnl:3

fen.extensions.simplify.state.last-error

extensions/behaviors/companions/simplify/state.fnl:3

fen.extensions.simplify.state.last-base

extensions/behaviors/companions/simplify/state.fnl:3

fen.extensions.simplify.state.run-state

extensions/behaviors/companions/simplify/state.fnl:3

fen.extensions.simplify.state.active-turn-id

extensions/behaviors/companions/simplify/state.fnl:3

fen.extensions.simplify.state.updated-at

extensions/behaviors/companions/simplify/state.fnl:3

fen.extensions.skills

Module neighborhood graph: DOT · SVG

fen.extensions.skills module graph

fen.extensions.skills.dir-exists?

function

Filesystem helper alias used by tests to stub directory existence during skill discovery.

tags: skills, paths, tests

extensions/behaviors/companions/skills/init.fnl:55

fen.extensions.skills.file-exists?

function

Filesystem helper alias used by tests to stub skill file existence checks.

tags: skills, paths, tests

extensions/behaviors/companions/skills/init.fnl:62

fen.extensions.skills.realpath

function

Filesystem helper alias used to canonicalize skill paths for deduplication and tests.

tags: skills, paths, tests

extensions/behaviors/companions/skills/init.fnl:69

fen.extensions.skills.parse-frontmatter

(parse-frontmatter path) -> SkillMeta|nil

Parse a skill file's YAML frontmatter into invokable metadata using the path-derived fallback name.

tags: skills, discovery, frontmatter

extensions/behaviors/companions/skills/init.fnl:187

fen.extensions.skills.discover

(discover extra-paths ?yield-fn)

Scan default roots plus explicit paths from --skill.

extensions/behaviors/companions/skills/init.fnl:320

fen.extensions.skills.system-prompt-section

(system-prompt-section skills)

Render a compact catalogue of model-invokable skills. Full instructions

extensions/behaviors/companions/skills/init.fnl:334

fen.extensions.skills.user-skills-dir

(user-skills-dir) -> string

Return fen's user-level skills directory under the XDG configuration root.

tags: skills, paths, user

extensions/behaviors/companions/skills/init.fnl:346

fen.extensions.skills.project-skills-dir

(project-skills-dir) -> string

Return fen's project-local skills directory path relative to the current workspace.

tags: skills, paths, project

extensions/behaviors/companions/skills/init.fnl:353

fen.extensions.skills.bundled-skills-dir

(bundled-skills-dir) -> string

Return the XDG data directory where fen materializes built-in skills.

tags: skills, paths, builtin

extensions/behaviors/companions/skills/init.fnl:359

fen.extensions.skills._discover-from-roots

function

Test helper alias for scanning an explicit root list without loading default skill roots.

tags: skills, discovery, tests

extensions/behaviors/companions/skills/init.fnl:365

fen.extensions.skills._default-roots

function

Test helper alias returning the ordered default user, project, and compatibility skill roots.

tags: skills, discovery, tests, roots

extensions/behaviors/companions/skills/init.fnl:372

fen.extensions.skills._ancestors

function

Test helper alias for the project-ancestor walker used when building default skill roots.

tags: skills, discovery, tests, paths

extensions/behaviors/companions/skills/init.fnl:379

fen.extensions.skills._discover-cache-key

function

Test helper alias exposing the path-seam-derived discover cache key so tests can assert distinct keys under injected VFS identities.

tags: skills, discovery, tests, cache

extensions/behaviors/companions/skills/init.fnl:403

fen.extensions.skills.skills-text

(skills-text skills ?filter)

Render discovered skills as a human-readable table for /skills list.

extensions/behaviors/companions/skills/init.fnl:448

fen.extensions.skills.skill-detail-lines

[skill]

extensions/behaviors/companions/skills/init.fnl:511

fen.extensions.skills.register

function

Registration entrypoint alias for installing the available-skills prompt fragment.

tags: skills, register, prompt

extensions/behaviors/companions/skills/init.fnl:803

fen.extensions.skills.register!

function

Registration entrypoint alias for installing the available-skills prompt fragment.

tags: skills, register, prompt

extensions/behaviors/companions/skills/init.fnl:803

fen.extensions.skills.bundled

Module neighborhood graph: DOT · SVG

fen.extensions.skills.bundled module graph

fen.extensions.skills.bundled.skills

[]

extensions/behaviors/companions/skills/bundled.fnl:63

fen.extensions.skills.ignore

Module neighborhood graph: DOT · SVG

fen.extensions.skills.ignore module graph

fen.extensions.skills.ignore.with-dir

(with-dir rules dir)

Return a fresh rule list = rules ++ ignore files found directly in dir.

extensions/behaviors/companions/skills/ignore.fnl:75

fen.extensions.skills.ignore.load-chain

(load-chain root)

Collect ignore rules walking the ancestors of root root-to-leaf.

extensions/behaviors/companions/skills/ignore.fnl:81

fen.extensions.skills.ignore.match?

(match? target is-dir? rules)

Last matching ignore rule wins. Negated rules re-include the path. The

extensions/behaviors/companions/skills/ignore.fnl:144

fen.extensions.skills.state

Module neighborhood graph: DOT · SVG

fen.extensions.skills.state module graph

fen.extensions.skills.state.visible?

extensions/behaviors/companions/skills/state.fnl:3

fen.extensions.skills.state.selected-name

extensions/behaviors/companions/skills/state.fnl:3

fen.extensions.skills.state.cached-rows

extensions/behaviors/companions/skills/state.fnl:3

fen.extensions.skills.state.cached-at

extensions/behaviors/companions/skills/state.fnl:3

fen.extensions.skills.state.cached-w

extensions/behaviors/companions/skills/state.fnl:3

fen.extensions.skills.state.cached-selected-name

extensions/behaviors/companions/skills/state.fnl:3

fen.extensions.skills.state.discover-cache-key

extensions/behaviors/companions/skills/state.fnl:3

fen.extensions.skills.state.discover-cache

extensions/behaviors/companions/skills/state.fnl:3

fen.extensions.skills.state.discover-cache-at

extensions/behaviors/companions/skills/state.fnl:3

fen.extensions.status

Module neighborhood graph: DOT · SVG

fen.extensions.status module graph

fen.extensions.status.register

[api]

extensions/behaviors/inspectors/status/init.fnl:7

fen.extensions.status.commands.status

Module neighborhood graph: DOT · SVG

fen.extensions.status.commands.status module graph

fen.extensions.status.commands.status.register

(register api) -> nil

Register the /status command and status panel for runtime, model, session, token, and extension diagnostics.

tags: commands, status, register

extensions/behaviors/inspectors/status/commands/status.fnl:145

fen.extensions.status.state.status

Module neighborhood graph: DOT · SVG

fen.extensions.status.state.status module graph

fen.extensions.status.state.status.visible?

boolean

Visibility flag for the persistent /status panel showing runtime, model, session, and context details.

tags: builtin, commands, state, status, panel

extensions/behaviors/inspectors/status/state/status.fnl:3

fen.extensions.status.state.status.cached-rows

[PresenterRow]|nil

Cached rendered /status panel rows reused while status inputs and terminal width remain stable.

tags: builtin, commands, state, status, cache

extensions/behaviors/inspectors/status/state/status.fnl:9

fen.extensions.status.state.status.cached-at

number

Timestamp for the /status panel cache, used to throttle recomputation of derived runtime details.

tags: builtin, commands, state, status, cache

extensions/behaviors/inspectors/status/state/status.fnl:15

fen.extensions.status.state.status.cached-w

number

Terminal width associated with cached /status rows so resize events rebuild aligned panel text.

tags: builtin, commands, state, status, cache

extensions/behaviors/inspectors/status/state/status.fnl:21

fen.extensions.status.util

Module neighborhood graph: DOT · SVG

fen.extensions.status.util module graph

fen.extensions.status.util.last-turn-latency

(last-turn-latency messages)

Compact 'N.Ns (M.M tok/s)' for the latest assistant message that carries a

extensions/behaviors/inspectors/status/util.fnl:6

fen.extensions.status.util.runtime-version

(runtime-version)

Return the build-stamped version string, or source/git fallback when

extensions/behaviors/inspectors/status/util.fnl:21

fen.extensions.stdio

Module neighborhood graph: DOT · SVG

fen.extensions.stdio module graph

fen.extensions.stdio.render-event

(render-event ev) -> nil

Render one event to stdio with prefixes, optional ANSI color, streaming delta coalescing, and stderr errors.

tags: stdio, presenter, events

extensions/adapters/presenters/stdio/init.fnl:106

fen.extensions.stdio.stdin-tty?

(stdin-tty?) -> boolean

Return whether stdin is an interactive terminal for prompt-prefix and line-mode behavior.

tags: stdio, presenter, tty

extensions/adapters/presenters/stdio/init.fnl:147

fen.extensions.stdio.drain-turn

(drain-turn ctx) -> nil

Drive cooperative on-tick callbacks until the active agent turn completes in stdio mode.

tags: stdio, presenter, loop

extensions/adapters/presenters/stdio/init.fnl:160

fen.extensions.stdio.submit-line

(submit-line ctx line interactive?) -> nil

Echo and submit one user line, then drain the resulting turn or emit a submit error.

tags: stdio, presenter, input

extensions/adapters/presenters/stdio/init.fnl:174

fen.extensions.stdio.run

(run ctx) -> nil

Run the line-oriented stdio presenter loop until EOF, prompting interactively when stdin is a TTY.

tags: stdio, presenter, run

extensions/adapters/presenters/stdio/init.fnl:187

fen.extensions.stdio.notify

(notify text opts?) -> nil

Implement the stdio UI notify hook by printing an informational line.

tags: stdio, presenter, ui, notify

extensions/adapters/presenters/stdio/init.fnl:206

fen.extensions.stdio.prompt

(prompt opts) -> string|nil

Implement the stdio UI prompt hook by printing a label and reading one line from stdin.

tags: stdio, presenter, ui, prompt

extensions/adapters/presenters/stdio/init.fnl:214

fen.extensions.stdio.select

(select opts) -> Choice|nil

Implement the stdio UI select hook by listing choices and returning the numbered selection.

tags: stdio, presenter, ui, select

extensions/adapters/presenters/stdio/init.fnl:225

fen.extensions.stdio.register

[api]

extensions/adapters/presenters/stdio/init.fnl:250

fen.extensions.steering

Module neighborhood graph: DOT · SVG

fen.extensions.steering module graph

fen.extensions.steering.register

(register api) -> true

Register the steering introspect snapshot and the default late-order input handler that drives steering/follow-up queueing.

tags: steering, register, input

extensions/behaviors/kernel/steering/init.fnl:11

fen.extensions.steering.service

Module neighborhood graph: DOT · SVG

fen.extensions.steering.service module graph

fen.extensions.steering.service.queue-info

(queue-info) -> {:steering-queued n :follow-up-queued n :steering-mode mode :follow-up-mode mode}

Current queue depths and drain modes, in the field names the status line consumes.

tags: steering, queue, status

extensions/behaviors/kernel/steering/service.fnl:51

fen.extensions.steering.service.queue-snapshot

(queue-snapshot) -> {:steering [line] :follow-up [line] :steering-mode mode :follow-up-mode mode}

Copied queue contents plus modes for UI rendering such as the /queue panel.

tags: steering, queue, introspect

extensions/behaviors/kernel/steering/service.fnl:67

fen.extensions.steering.service.queue!

(queue! kind text) -> {:ok true :queued true :queue kind}|{:ok false :error msg}

Append a line to the steering or follow-up queue, emitting the :queued event and refreshed status counts.

tags: steering, queue

extensions/behaviors/kernel/steering/service.fnl:78

fen.extensions.steering.service.requeue!

(requeue! text from to) -> {:ok true :queued true :queue kind}|{:ok false :error msg}

Move the most recent still-pending copy of a line from one queue to the end of the other, emitting :queued and refreshed status counts like queue!; fails when no copy is pending.

tags: steering, queue

extensions/behaviors/kernel/steering/service.fnl:101

fen.extensions.steering.service.install-runtime!

[runtime]

extensions/behaviors/kernel/steering/service.fnl:124

fen.extensions.steering.service.enqueue!

(enqueue! kind text ?opts)

Public-runtime implementation behind api.enqueue. Follow-up idle-start is

extensions/behaviors/kernel/steering/service.fnl:134

fen.extensions.steering.service.start-idle-follow-up!

(start-idle-follow-up!) -> boolean

At an interactive safe tick, start one requested idle follow-up through the runtime's normal user-turn submitter.

tags: steering, queue, extensions, runtime

extensions/behaviors/kernel/steering/service.fnl:147

fen.extensions.steering.service.clear-queues!

(clear-queues! ?kind) -> nil

Empty the named queue, or both when kind is nil or :all, and refresh status counts.

tags: steering, queue

extensions/behaviors/kernel/steering/service.fnl:169

fen.extensions.steering.service.set-queue-mode!

(set-queue-mode! kind mode) -> ok?

Set a queue's drain mode to :one-at-a-time or :all, rejecting unknown kinds and modes.

tags: steering, queue

extensions/behaviors/kernel/steering/service.fnl:185

fen.extensions.steering.service.get-steering

(get-steering) -> [line]

Drain the steering queue by its mode for injection at the agent's next safe boundary.

tags: steering, queue, agent

extensions/behaviors/kernel/steering/service.fnl:200

fen.extensions.steering.service.get-follow-up

(get-follow-up) -> [line]

Drain the follow-up queue by its mode when the agent finishes a turn.

tags: steering, queue, agent

extensions/behaviors/kernel/steering/service.fnl:210

fen.extensions.steering.service.submit

(submit line ctx)

Queueing decisions for non-slash input. The caller owns turn orchestration:

extensions/behaviors/kernel/steering/service.fnl:227

fen.extensions.steering.service.handle-input

(handle-input input ctx)

Input-pipeline handler wrapping submit. input is

extensions/behaviors/kernel/steering/service.fnl:240

fen.extensions.steering.state

Module neighborhood graph: DOT · SVG

fen.extensions.steering.state module graph

fen.extensions.steering.state.steering-queue

[string]

Pending steering lines injected into the running turn at the next safe boundary.

tags: steering, state, queue

extensions/behaviors/kernel/steering/state.fnl:7

fen.extensions.steering.state.follow-up-queue

[string]

Pending follow-up lines submitted as fresh user turns after the current turn completes.

tags: steering, state, queue

extensions/behaviors/kernel/steering/state.fnl:13

fen.extensions.steering.state.steering-mode

":one-at-a-time"|":all"

Drain mode for the steering queue - one line per boundary or the whole queue at once.

tags: steering, state, queue

extensions/behaviors/kernel/steering/state.fnl:19

fen.extensions.steering.state.one-at-a-time

extensions/behaviors/kernel/steering/state.fnl:31

fen.extensions.steering.state.follow-up-mode

":one-at-a-time"|":all"

Drain mode for the follow-up queue - one line per turn end or the whole queue at once.

tags: steering, state, queue

extensions/behaviors/kernel/steering/state.fnl:25

fen.extensions.steering.state.runtime

extensions/behaviors/kernel/steering/state.fnl:31

fen.extensions.steering.state.idle-follow-up-start?

extensions/behaviors/kernel/steering/state.fnl:31

fen.extensions.subagent

Module neighborhood graph: DOT · SVG

fen.extensions.subagent module graph

fen.extensions.subagent.register

[api]

extensions/behaviors/companions/subagent/init.fnl:2089

fen.extensions.subagent.bundled

Module neighborhood graph: DOT · SVG

fen.extensions.subagent.bundled module graph

fen.extensions.subagent.bundled.entries

[]

extensions/behaviors/companions/subagent/bundled.fnl:81

fen.extensions.subagent.bundled.get

[name]

extensions/behaviors/companions/subagent/bundled.fnl:84

fen.extensions.subagent.channel

Module neighborhood graph: DOT · SVG

fen.extensions.subagent.channel module graph

fen.extensions.subagent.channel.open

(open run control-path event-path) -> channel

Return parent channel state for RUN over the control and event files. The control file must already exist with private permissions.

tags: subagent, wire

extensions/behaviors/companions/subagent/channel.fnl:15

fen.extensions.subagent.channel.send!

(send! channel type ?payload) -> seq|nil, reason

Stamp, validate, and append one control line with a strictly increasing seq; returns the seq, or nil plus a reason.

tags: subagent, wire

extensions/behaviors/companions/subagent/channel.fnl:34

fen.extensions.subagent.channel.poll

(poll channel) -> [message], [error]

Read a bounded batch of child events, validate each against the wire schema and increasing seq, and advance the mirrored status. Returns the valid messages (a control-ack carries the answered control as :control) and per-line errors; a version mismatch, foreign run, or truncated file sets channel.error.

tags: subagent, wire

extensions/behaviors/companions/subagent/channel.fnl:81

fen.extensions.subagent.channel.idle?

(idle? channel) -> boolean

True when the child is ready with every control acknowledged, so its task turn is done; a steer the child still holds queued there is reported dropped when the run closes.

tags: subagent, wire

extensions/behaviors/companions/subagent/channel.fnl:112

fen.extensions.subagent.channel.close!

[ch]

extensions/behaviors/companions/subagent/channel.fnl:120

fen.extensions.subagent.discover

Module neighborhood graph: DOT · SVG

fen.extensions.subagent.discover module graph

fen.extensions.subagent.discover.roots

(roots) -> [{:path :scope}]

Agent discovery roots in precedence order (project, user, bundled).

tags: subagent, discovery, roots

extensions/behaviors/companions/subagent/discover.fnl:27

fen.extensions.subagent.discover.find-agent

(find-agent name) -> (values AgentConfig nil) | (values nil AgentError) | nil

Resolve an agent definition by filename, project roots winning over user roots, which win over bundled defaults. Returns cfg, an invalid-definition error for the highest-precedence present candidate, or nil for no matching file.

tags: subagent, discovery

extensions/behaviors/companions/subagent/discover.fnl:136

fen.extensions.subagent.discover.list

(list) -> [AgentConfig]

All discovered agents across roots, deduped by name (project > user > bundled). Used by tests and a future /agents command.

tags: subagent, discovery

extensions/behaviors/companions/subagent/discover.fnl:167

fen.extensions.subagent.runs

Module neighborhood graph: DOT · SVG

fen.extensions.subagent.runs module graph

fen.extensions.subagent.runs.repeated-timeout-warning

(repeated-timeout-warning task-fingerprint)

Return bounded retained-history telemetry for an identical launch.

extensions/behaviors/companions/subagent/runs.fnl:115

fen.extensions.subagent.runs.start!

[opts]

extensions/behaviors/companions/subagent/runs.fnl:142

fen.extensions.subagent.runs.accumulate-usage!

(accumulate-usage! id usage ?source)

Fold one provider usage report (an :llm-end turn) into a run's durable

extensions/behaviors/companions/subagent/runs.fnl:186

fen.extensions.subagent.runs.mark-first-artifact!

(mark-first-artifact! id artifact)

Record the first useful artifact/progress signal for a run exactly once.

extensions/behaviors/companions/subagent/runs.fnl:208

fen.extensions.subagent.runs.finish!

[id status ?details]

extensions/behaviors/companions/subagent/runs.fnl:219

fen.extensions.subagent.runs.active-count

[]

extensions/behaviors/companions/subagent/runs.fnl:268

fen.extensions.subagent.runs.find

[id]

extensions/behaviors/companions/subagent/runs.fnl:271

fen.extensions.subagent.runs.record

(record id)

Return the private mutable run record for extension behavior.

extensions/behaviors/companions/subagent/runs.fnl:275

fen.extensions.subagent.runs.active-records

(active-records)

Return private mutable records of active runs in launch order.

extensions/behaviors/companions/subagent/runs.fnl:279

fen.extensions.subagent.runs.attach-job!

(attach-job! id)

Track an active run as a detached background job.

extensions/behaviors/companions/subagent/runs.fnl:287

fen.extensions.subagent.runs.job

(job id)

Return the private mutable background job record for extension behavior.

extensions/behaviors/companions/subagent/runs.fnl:294

fen.extensions.subagent.runs.jobs

(jobs)

Return private mutable background job records in launch order.

extensions/behaviors/companions/subagent/runs.fnl:298

fen.extensions.subagent.runs.append-event!

[id ev]

extensions/behaviors/companions/subagent/runs.fnl:306

fen.extensions.subagent.runs.append-event-error!

[id err]

extensions/behaviors/companions/subagent/runs.fnl:320

fen.extensions.subagent.runs.request-steer!

(request-steer! id note ?source)

Queue a steering note for an active run; the run's driver sends it to the

extensions/behaviors/companions/subagent/runs.fnl:328

fen.extensions.subagent.runs.take-steering!

[id]

extensions/behaviors/companions/subagent/runs.fnl:348

fen.extensions.subagent.runs.active-runs

[]

extensions/behaviors/companions/subagent/runs.fnl:353

fen.extensions.subagent.runs.runs

[]

extensions/behaviors/companions/subagent/runs.fnl:359

fen.extensions.subagent.runs.review-worktrees

[]

extensions/behaviors/companions/subagent/runs.fnl:363

fen.extensions.subagent.runs.add-review-worktrees!

[records]

extensions/behaviors/companions/subagent/runs.fnl:366

fen.extensions.subagent.runs.remove-review-worktree!

[worktree-path]

extensions/behaviors/companions/subagent/runs.fnl:372

fen.extensions.subagent.runs.snapshot

[]

extensions/behaviors/companions/subagent/runs.fnl:380

fen.extensions.subagent.runs.reconcile-background!

(reconcile-background!)

Finish background runs whose job is no longer tracked. Blocking runs are

extensions/behaviors/companions/subagent/runs.fnl:390

fen.extensions.subagent.runs.remove!

(remove! id)

Remove one inactive run record. Active runs must be cancelled first.

extensions/behaviors/companions/subagent/runs.fnl:406

fen.extensions.subagent.runs.clear!

(clear!)

Clear run records after callers have reaped active jobs. Preserve the

extensions/behaviors/companions/subagent/runs.fnl:417

fen.extensions.subagent.runs.reset!

(reset!)

Test/startup reset, including the process-lifetime id sequence.

extensions/behaviors/companions/subagent/runs.fnl:429

fen.extensions.subagent.runs.copy-run

extensions/behaviors/companions/subagent/runs.fnl:435

fen.extensions.subagent.state

Module neighborhood graph: DOT · SVG

fen.extensions.subagent.state module graph

fen.extensions.subagent.state.data

extensions/behaviors/companions/subagent/state.fnl:8

fen.extensions.subagent.worktrees

Module neighborhood graph: DOT · SVG

fen.extensions.subagent.worktrees module graph

fen.extensions.subagent.worktrees.create

(create cwd ref count) -> [ReviewWorktree], string|nil

Create detached sibling git worktrees for read-only review without changing the caller checkout.

tags: subagent, git, worktree, review

extensions/behaviors/companions/subagent/worktrees.fnl:44

fen.extensions.subagent.worktrees.cleanup

(cleanup record) -> boolean, string|nil

Remove one workflow-created detached review worktree only when its head and porcelain status are unchanged.

tags: subagent, git, worktree, review, cleanup

extensions/behaviors/companions/subagent/worktrees.fnl:92

fen.extensions.todo

Module neighborhood graph: DOT · SVG

fen.extensions.todo module graph

fen.extensions.todo.register

extensions/behaviors/companions/todo/init.fnl:355

fen.extensions.todo.register!

extensions/behaviors/companions/todo/init.fnl:356

fen.extensions.todo.execute

extensions/behaviors/companions/todo/init.fnl:357

fen.extensions.todo.validate-items

extensions/behaviors/companions/todo/init.fnl:358

fen.extensions.todo.copy-items

extensions/behaviors/companions/todo/init.fnl:359

fen.extensions.todo.counts

extensions/behaviors/companions/todo/init.fnl:360

fen.extensions.todo.summary-line

extensions/behaviors/companions/todo/init.fnl:361

fen.extensions.todo.render-text

extensions/behaviors/companions/todo/init.fnl:362

fen.extensions.todo.panel-spec

extensions/behaviors/companions/todo/init.fnl:363

fen.extensions.todo.rebuild-from-messages!

extensions/behaviors/companions/todo/init.fnl:364

fen.extensions.todo._state

extensions/behaviors/companions/todo/init.fnl:365

fen.extensions.todo._test

extensions/behaviors/companions/todo/init.fnl:366

fen.extensions.todo.state

Module neighborhood graph: DOT · SVG

fen.extensions.todo.state module graph

fen.extensions.todo.state.items

extensions/behaviors/companions/todo/state.fnl:3

fen.extensions.todo.state.version

extensions/behaviors/companions/todo/state.fnl:3

fen.extensions.todo.state.visible?

extensions/behaviors/companions/todo/state.fnl:3

fen.extensions.todo.state.cached-rows

extensions/behaviors/companions/todo/state.fnl:3

fen.extensions.todo.state.cached-w

extensions/behaviors/companions/todo/state.fnl:3

fen.extensions.todo.state.cached-version

extensions/behaviors/companions/todo/state.fnl:3

fen.extensions.todo.state.last-updated

extensions/behaviors/companions/todo/state.fnl:3

fen.extensions.tui

Module neighborhood graph: DOT · SVG

fen.extensions.tui module graph

fen.extensions.tui.mouse-enabled?

(mouse-enabled?)

Mouse capture is on by default so the wheel scrolls the transcript.

extensions/adapters/presenters/tui/init.fnl:67

fen.extensions.tui.input-mode

(input-mode)

INPUT_ESC always (bare Esc surfaces immediately; input.fnl synthesizes

extensions/adapters/presenters/tui/init.fnl:81

fen.extensions.tui.init!

(init!)

Initialize termbox2 (gated by tb-initialized? — runs at most once per

extensions/adapters/presenters/tui/init.fnl:90

fen.extensions.tui.shutdown

(shutdown) -> nil

Tear down termbox and bracketed paste mode when the TUI presenter exits.

tags: tui, lifecycle, termbox

extensions/adapters/presenters/tui/init.fnl:122

fen.extensions.tui.hard-refresh!

(hard-refresh!)

Recover the screen after external terminal interference (another process

extensions/adapters/presenters/tui/init.fnl:137

fen.extensions.tui.suspend!

(suspend!)

Suspend fen to the shell like any full-screen app. Raw mode disables ISIG,

extensions/adapters/presenters/tui/init.fnl:146

fen.extensions.tui.reset-conversation!

(reset-conversation!)

Clear per-conversation TUI state for /new while preserving process/UI

extensions/adapters/presenters/tui/init.fnl:158

fen.extensions.tui.set-status-info

(set-status-info info)

Optional: caller (main.fnl) can populate provider/model on the status

extensions/adapters/presenters/tui/init.fnl:209

fen.extensions.tui.input-meta

(input-meta ?ev)

Diagnostics for an input-phase stall: which event was being handled and how

extensions/adapters/presenters/tui/init.fnl:265

fen.extensions.tui.warn-if-stalled!

[phase start-ms ?get-turn ?ev ?start-cpu]

extensions/adapters/presenters/tui/init.fnl:327

fen.extensions.tui.peek-timeout-ms

(peek-timeout-ms is-busy?)

Use a short poll while busy or resolving Esc/Alt, but sleep longer when the

extensions/adapters/presenters/tui/init.fnl:353

fen.extensions.tui.interrupted-syscall?

(interrupted-syscall? err)

A signal (resize/job-control/SIGCHLD) can interrupt termbox's

extensions/adapters/presenters/tui/init.fnl:362

fen.extensions.tui.scroll-event?

(scroll-event? ev) -> boolean

Return whether a termbox event moves the transcript viewport.

tags: tui, input, scroll, performance

extensions/adapters/presenters/tui/init.fnl:382

fen.extensions.tui.guard-tick!

(guard-tick! label f)

Run a cooperative per-tick worker without letting it terminate the TUI.

extensions/adapters/presenters/tui/init.fnl:394

fen.extensions.tui.tick-background!

(tick-background!)

Advance workspace-local turns and retained subagent projections once.

extensions/adapters/presenters/tui/init.fnl:404

fen.extensions.tui.drain-scroll-burst!

(drain-scroll-burst! first-event handle)

Handle FIRST-EVENT and coalesce an immediately queued scroll burst. The

extensions/adapters/presenters/tui/init.fnl:414

fen.extensions.tui.run

(run on-submit on-tick on-cancel is-busy? ?get-turn) -> nil

Run the TUI presenter loop, repainting, polling termbox events, ticking cooperative work, and dispatching input. ?get-turn optionally returns the in-flight agent coroutine for richer stall diagnostics.

tags: tui, presenter, loop, termbox

extensions/adapters/presenters/tui/init.fnl:442

fen.extensions.tui.register

[api]

extensions/adapters/presenters/tui/init.fnl:531

fen.extensions.tui.clipboard

Module neighborhood graph: DOT · SVG

fen.extensions.tui.clipboard module graph

fen.extensions.tui.clipboard.max-bytes

number

Maximum pre-encode selection size copied via OSC 52 before the payload is refused, guarding slow terminals and terminal input buffers.

tags: tui, clipboard, osc52, limits

extensions/adapters/presenters/tui/clipboard.fnl:9

fen.extensions.tui.clipboard.osc52

(osc52 text)

Return the OSC 52 escape string that sets the system clipboard (selection

extensions/adapters/presenters/tui/clipboard.fnl:20

fen.extensions.tui.clipboard.write!

(write! s)

Default writer: emit s to the terminal. init.fnl uses the same

extensions/adapters/presenters/tui/clipboard.fnl:29

fen.extensions.tui.clipboard.copy

(copy text)

Copy text to the clipboard via OSC 52. Returns a result table:

extensions/adapters/presenters/tui/clipboard.fnl:36

fen.extensions.tui.completion

Module neighborhood graph: DOT · SVG

fen.extensions.tui.completion module graph

fen.extensions.tui.completion.ensure-defaults!

(ensure-defaults!) -> nil

Backfill persistent completion-menu state fields after hot reloads or on first use.

tags: tui, completion, state, reload

extensions/adapters/presenters/tui/completion.fnl:13

fen.extensions.tui.completion.context

(context buf cursor)

Return a context table describing what to complete at cursor, or nil.

extensions/adapters/presenters/tui/completion.fnl:30

fen.extensions.tui.completion.command-candidates

(command-candidates prefix)

Return commands matching prefix.

extensions/adapters/presenters/tui/completion.fnl:86

fen.extensions.tui.completion.normalize-choice

(normalize-choice choice)

Coerce one raw completer result into a menu choice.

extensions/adapters/presenters/tui/completion.fnl:109

fen.extensions.tui.completion.arg-candidates

(arg-candidates command arg-prefix ctx) -> [Choice]

Ask a command for argument completions, normalize them, then fuzzy-filter and rank them by the typed word.

tags: tui, completion, arguments, fuzzy

extensions/adapters/presenters/tui/completion.fnl:138

fen.extensions.tui.completion.candidates

(candidates ctx completion-ctx) -> kind [Choice]

Resolve completion choices for a detected context, dispatching to command or argument candidates.

tags: tui, completion, dispatch

extensions/adapters/presenters/tui/completion.fnl:154

fen.extensions.tui.completion.invalidate!

(invalidate!) -> nil

Force the next completion refresh to recompute candidates even when the input snapshot is unchanged.

tags: tui, completion, async, refresh

extensions/adapters/presenters/tui/completion.fnl:169

fen.extensions.tui.completion.refresh!

(refresh! ?ctx)

Recompute menu items from the live input buffer. Opens the menu when

extensions/adapters/presenters/tui/completion.fnl:179

fen.extensions.tui.completion.close!

(close!) -> nil

Hide the completion menu and reset its selection without touching the input buffer.

tags: tui, completion, menu, dismiss

extensions/adapters/presenters/tui/completion.fnl:217

fen.extensions.tui.completion.dismiss!

(dismiss!)

Hide the menu for the current buffer/cursor snapshot. Unlike close!,

extensions/adapters/presenters/tui/completion.fnl:230

fen.extensions.tui.completion.active?

(active?) -> boolean

Report whether the inline completion menu currently has selectable items.

tags: tui, completion, menu, state

extensions/adapters/presenters/tui/completion.fnl:241

fen.extensions.tui.completion.next!

(next!) -> nil

Advance the completion selection to the next item, wrapping at the end.

tags: tui, completion, navigation

extensions/adapters/presenters/tui/completion.fnl:257

fen.extensions.tui.completion.prev!

(prev!) -> nil

Move the completion selection to the previous item, wrapping at the start.

tags: tui, completion, navigation

extensions/adapters/presenters/tui/completion.fnl:264

fen.extensions.tui.completion.selected

(selected) -> Choice|nil

Return the currently highlighted completion choice, or nil when the menu is empty.

tags: tui, completion, selection

extensions/adapters/presenters/tui/completion.fnl:271

fen.extensions.tui.completion.selected-exact-command?

(selected-exact-command?)

Return true when the menu is highlighting the command name already

extensions/adapters/presenters/tui/completion.fnl:280

fen.extensions.tui.completion.commit!

(commit! ?dismiss?)

Splice the selected candidate into the input buffer. When dismiss? is

extensions/adapters/presenters/tui/completion.fnl:312

fen.extensions.tui.completion.visible-window

(visible-window count cursor max-rows) -> first item-h

Compute the scrolled slice of completion items that keeps the selected row on screen.

tags: tui, completion, viewport, scroll

extensions/adapters/presenters/tui/completion.fnl:329

fen.extensions.tui.completion.rows

(rows w) -> [PanelRow]

Build styled menu rows (bordered, scrolled, marked selection) for the above-input completion panel.

tags: tui, completion, panel, rows

extensions/adapters/presenters/tui/completion.fnl:350

fen.extensions.tui.completion.panel-spec

(panel-spec) -> PanelSpec

Build the :above-input panel spec that renders the live completion menu when active.

tags: tui, completion, panel, register

extensions/adapters/presenters/tui/completion.fnl:397

fen.extensions.tui.draw

Module neighborhood graph: DOT · SVG

fen.extensions.tui.draw module graph

fen.extensions.tui.draw.in-bounds?

(in-bounds? x y) -> boolean

Return whether a zero-based terminal coordinate is inside the current termbox dimensions.

tags: tui, draw, bounds, termbox

extensions/adapters/presenters/tui/draw.fnl:8

fen.extensions.tui.draw.fill-row

(fill-row y x0 x1 ch fg bg)

Fill a row segment. Use one tb.print call instead of one set_cell call per

extensions/adapters/presenters/tui/draw.fnl:16

fen.extensions.tui.draw.utf8-prefix-cols

(utf8-prefix-cols s cols)

Return a prefix of s containing at most cols UTF-8 codepoints. Still

extensions/adapters/presenters/tui/draw.fnl:27

fen.extensions.tui.draw.put-clipped

(put-clipped x y fg bg s width-cap)

Print s starting at x,y but cap at width-cap columns. tb_print returns

extensions/adapters/presenters/tui/draw.fnl:55

fen.extensions.tui.ingest

Module neighborhood graph: DOT · SVG

fen.extensions.tui.ingest module graph

fen.extensions.tui.ingest.append-event

(append-event ev ?opts)

Ingest EV. With :transcript-only?, status side effects land in the

extensions/adapters/presenters/tui/ingest.fnl:299

fen.extensions.tui.input

Module neighborhood graph: DOT · SVG

fen.extensions.tui.input module graph

fen.extensions.tui.input.input-prompt

(input-prompt)

Return the active tab's editor label without changing main-session chrome.

extensions/adapters/presenters/tui/input.fnl:23

fen.extensions.tui.input.idle-hint

(idle-hint width)

Single source for empty-input guidance; contextual suggestions extend here

extensions/adapters/presenters/tui/input.fnl:39

fen.extensions.tui.input.show-hint!

(show-hint! ev)

A hint that lands after the user started typing is stale, so it is dropped

extensions/adapters/presenters/tui/input.fnl:55

fen.extensions.tui.input.clear-hint!

(clear-hint!) -> nil

Dismiss the pending contextual hint so the default idle placeholder returns.

tags: tui, input, hint, placeholder

extensions/adapters/presenters/tui/input.fnl:70

fen.extensions.tui.input.ensure-defaults!

(ensure-defaults!)

Backfill input-region state fields that may be missing on a live

extensions/adapters/presenters/tui/input.fnl:80

fen.extensions.tui.input.input-display-rows

(input-display-rows buf width cursor ?prompt-width)

Return wrapped input display rows.

extensions/adapters/presenters/tui/input.fnl:100

fen.extensions.tui.input.cursor-display-pos

(cursor-display-pos rows cursor)

Return (row-index-0, col) for cursor in wrapped input rows.

extensions/adapters/presenters/tui/input.fnl:157

fen.extensions.tui.input.input-rows

(input-rows)

Number of rows the input area occupies, capped at INPUT-ROWS-MAX.

extensions/adapters/presenters/tui/input.fnl:167

fen.extensions.tui.input.paint-input

(paint-input layout) -> nil

Paint the visible wrapped input rows and place or hide the terminal cursor within the input region.

tags: tui, input, paint, cursor

extensions/adapters/presenters/tui/input.fnl:177

fen.extensions.tui.input.refresh-completion!

(refresh-completion!)

Recompute main-session completion, or close it outside main input mode.

extensions/adapters/presenters/tui/input.fnl:369

fen.extensions.tui.input.open-workspace-switcher!

(open-workspace-switcher!)

Open the existing modal selector so popup focus remains single-owner.

extensions/adapters/presenters/tui/input.fnl:582

fen.extensions.tui.input.handle-key

(handle-key ev on-submit on-cancel is-busy?)

Mutates state in response to a single key event. Returns true if the

extensions/adapters/presenters/tui/input.fnl:602

fen.extensions.tui.input.copy-selection!

(copy-selection!)

Extract the currently selected transcript text and copy it via OSC 52.

extensions/adapters/presenters/tui/input.fnl:849

fen.extensions.tui.input.handle-mouse

(handle-mouse ev)

Wheel up/down scrolls the transcript by MOUSE-WHEEL-LINES per notch.

extensions/adapters/presenters/tui/input.fnl:879

fen.extensions.tui.input.handle-event

(handle-event ev on-submit on-cancel is-busy?) -> boolean|nil

Route termbox keyboard, mouse, resize, paste, and Alt-synthesized events through the TUI input layer.

tags: tui, input, events, termbox

extensions/adapters/presenters/tui/input.fnl:933

fen.extensions.tui.markdown

Module neighborhood graph: DOT · SVG

fen.extensions.tui.markdown module graph

fen.extensions.tui.markdown.parse

(parse s) -> [MarkdownBlock]

Parse Markdown source into the lightweight block records understood by the TUI renderer.

tags: tui, markdown, parse, blocks

extensions/adapters/presenters/tui/markdown.fnl:561

fen.extensions.tui.markdown.parse-inline

(parse-inline s attr?) -> [Segment]

Parse simple inline Markdown spans into styled text segments for termbox painting.

tags: tui, markdown, parse, inline

extensions/adapters/presenters/tui/markdown.fnl:568

fen.extensions.tui.markdown.render-block

(render-block block width) -> [PresenterRow]

Render one parsed Markdown block into wrapped TUI rows for the requested width.

tags: tui, markdown, render, blocks

extensions/adapters/presenters/tui/markdown.fnl:575

fen.extensions.tui.markdown.render-text

(render-text s width) -> [PresenterRow]

Parse and render Markdown text into styled TUI rows while preserving readable chat line breaks.

tags: tui, markdown, render, text

extensions/adapters/presenters/tui/markdown.fnl:582

fen.extensions.tui.markdown.display-len

(display-len s) -> number

Approximate display width by counting UTF-8 codepoints as terminal cells.

tags: tui, markdown, width, utf8

extensions/adapters/presenters/tui/markdown.fnl:589

fen.extensions.tui.paint

Module neighborhood graph: DOT · SVG

fen.extensions.tui.paint module graph

fen.extensions.tui.paint.ensure-state-defaults!

(ensure-state-defaults!)

Fill in state fields that may be missing on a live state table

extensions/adapters/presenters/tui/paint.fnl:52

fen.extensions.tui.paint.max-scroll

(max-scroll)

Total wrapped line count minus the visible region. Used to clamp PgUp.

extensions/adapters/presenters/tui/paint.fnl:62

fen.extensions.tui.paint.layout

(layout) -> Layout

Compute status, transcript, input, and registered panel slots for the current terminal dimensions.

tags: tui, paint, layout, panels

extensions/adapters/presenters/tui/paint.fnl:127

fen.extensions.tui.paint.paint-panels

(paint-panels layout) -> nil

Render registered above-input and below-status panels with per-panel error isolation.

tags: tui, paint, panels, errors

extensions/adapters/presenters/tui/paint.fnl:245

fen.extensions.tui.paint.paint-transcript

(paint-transcript layout) -> nil

Paint the visible transcript viewport rows and its scrolled-position affordance into the reserved transcript region.

tags: tui, paint, transcript, viewport, scrollbar

extensions/adapters/presenters/tui/paint.fnl:271

fen.extensions.tui.paint.paint-input

(paint-input layout) -> nil

Delegate to the input renderer for the reserved input region.

tags: tui, paint, input, delegate

extensions/adapters/presenters/tui/paint.fnl:297

fen.extensions.tui.paint.invalidate!

(invalidate!)

Mark the TUI as needing a repaint on the next presenter-loop pass.

extensions/adapters/presenters/tui/paint.fnl:307

fen.extensions.tui.paint.invalidate-full!

(invalidate-full!)

Request a cache-clearing repaint. Used for resize/reload/display toggles

extensions/adapters/presenters/tui/paint.fnl:311

fen.extensions.tui.paint.busy?

(busy?) -> boolean|string|nil

Report whether thinking or tool-running status should keep the busy animation active.

tags: tui, paint, busy, status

extensions/adapters/presenters/tui/paint.fnl:316

fen.extensions.tui.paint.advance-spinner-if-due!

(advance-spinner-if-due!)

Advance the busy spinner at a low cadence measured in presenter-loop ticks.

extensions/adapters/presenters/tui/paint.fnl:326

fen.extensions.tui.paint.redraw-if-needed!

(redraw-if-needed!)

Paint only when invalidated. force-redraw? first blank-presents and clears

extensions/adapters/presenters/tui/paint.fnl:341

fen.extensions.tui.paint.paint-frame!

(paint-frame!)

Paint one full frame into termbox's back buffer without presenting it.

extensions/adapters/presenters/tui/paint.fnl:357

fen.extensions.tui.paint.redraw!

(redraw!) -> nil

Paint a complete TUI frame and present termbox's back buffer to the terminal.

tags: tui, paint, redraw, termbox

extensions/adapters/presenters/tui/paint.fnl:376

fen.extensions.tui.paint.clear-render-caches!

(clear-render-caches!)

Drop cached rendered rows so a forced repaint or /reload recomputes all

extensions/adapters/presenters/tui/paint.fnl:386

fen.extensions.tui.paint.force-redraw!

(force-redraw!)

Force a full terminal repaint. The blank present invalidates termbox2's

extensions/adapters/presenters/tui/paint.fnl:392

fen.extensions.tui.panels.busy

Module neighborhood graph: DOT · SVG

fen.extensions.tui.panels.busy module graph

fen.extensions.tui.panels.busy.spin-char

(spin-char) -> string

Return the current busy indicator glyph, respecting the animation toggle and spinner frame counter.

tags: tui, panel, busy, spinner

extensions/adapters/presenters/tui/panels/busy.fnl:22

fen.extensions.tui.panels.busy.turn-elapsed

(turn-elapsed)

Seconds since the current turn started, or empty string when idle.

extensions/adapters/presenters/tui/panels/busy.fnl:35

fen.extensions.tui.panels.busy.height

(height ctx) -> number

Reserve one above-input row only while thinking, retrying, or running a tool.

tags: tui, panel, busy, layout

extensions/adapters/presenters/tui/panels/busy.fnl:73

fen.extensions.tui.panels.busy.render

(render ctx) -> [PresenterRow]

Render spinner, busy label, retry delay, elapsed time, and the next ctrl-c action for the active turn when it fits.

tags: tui, panel, busy, render

extensions/adapters/presenters/tui/panels/busy.fnl:81

fen.extensions.tui.panels.busy.spec

(spec) -> PanelSpec

Return the built-in busy panel contribution that appears above the input while work is active.

tags: tui, panel, busy, register

extensions/adapters/presenters/tui/panels/busy.fnl:99

fen.extensions.tui.panels.errors

Module neighborhood graph: DOT · SVG

fen.extensions.tui.panels.errors module graph

fen.extensions.tui.panels.errors.ensure-defaults!

(ensure-defaults!) -> nil

Backfill persistent error-panel visibility state on live TUI state tables after reloads.

tags: tui, panel, errors, state, reload

extensions/adapters/presenters/tui/panels/errors.fnl:10

fen.extensions.tui.panels.errors.toggle!

(toggle! value?) -> boolean

Toggle or set the TUI error panel visibility and return the new visible state.

tags: tui, panel, errors, visibility

extensions/adapters/presenters/tui/panels/errors.fnl:62

fen.extensions.tui.panels.errors.visible?

(visible?) -> boolean

Report whether the recent-errors panel should currently reserve below-status space.

tags: tui, panel, errors, visibility

extensions/adapters/presenters/tui/panels/errors.fnl:73

fen.extensions.tui.panels.errors.has-errors?

(has-errors?)

Cache the presence check by transcript identity and length. Transcript

extensions/adapters/presenters/tui/panels/errors.fnl:82

fen.extensions.tui.panels.errors.clear-transcript-errors!

(clear-transcript-errors!) -> nil

Remove error and extension-error events from the transcript and invalidate transcript layout cache.

tags: tui, panel, errors, transcript, cache

extensions/adapters/presenters/tui/panels/errors.fnl:132

fen.extensions.tui.panels.errors.spec

(spec) -> PanelSpec

Return the error introspection panel contribution for below-status rendering.

tags: tui, panel, errors, register

extensions/adapters/presenters/tui/panels/errors.fnl:146

fen.extensions.tui.panels.status

Module neighborhood graph: DOT · SVG

fen.extensions.tui.panels.status module graph

fen.extensions.tui.panels.status.ensure-defaults!

(ensure-defaults!)

Backfill status-info fields that may be missing on a live state

extensions/adapters/presenters/tui/panels/status.fnl:24

fen.extensions.tui.panels.status.paint

(paint layout) -> nil

Paint the top status row by composing registered left and right status items with error isolation.

tags: tui, panel, status, paint, registry

extensions/adapters/presenters/tui/panels/status.fnl:107

fen.extensions.tui.panels.tabs

Module neighborhood graph: DOT · SVG

fen.extensions.tui.panels.tabs module graph

fen.extensions.tui.panels.tabs.height

[_ctx]

extensions/adapters/presenters/tui/panels/tabs.fnl:64

fen.extensions.tui.panels.tabs.layout

(layout width)

Build width-bounded tab segments and click regions from one model.

extensions/adapters/presenters/tui/panels/tabs.fnl:68

fen.extensions.tui.panels.tabs.action-at

[x width]

extensions/adapters/presenters/tui/panels/tabs.fnl:105

fen.extensions.tui.panels.tabs.tab-at

[x width]

extensions/adapters/presenters/tui/panels/tabs.fnl:113

fen.extensions.tui.panels.tabs.render

[ctx]

extensions/adapters/presenters/tui/panels/tabs.fnl:117

fen.extensions.tui.panels.tabs.spec

[]

extensions/adapters/presenters/tui/panels/tabs.fnl:121

fen.extensions.tui.panels.transcript

Module neighborhood graph: DOT · SVG

fen.extensions.tui.panels.transcript module graph

fen.extensions.tui.panels.transcript.TOOL-RESULT-PREVIEW-BYTES

number

Maximum inline bytes from a tool result shown in collapsed transcript previews.

tags: tui, transcript, tools, defaults

extensions/adapters/presenters/tui/panels/transcript.fnl:14

fen.extensions.tui.panels.transcript.ensure-defaults!

(ensure-defaults!)

Backfill transcript-region state fields that may be missing on a

extensions/adapters/presenters/tui/panels/transcript.fnl:21

fen.extensions.tui.panels.transcript.args-

(args->string args) -> string

Convert tool-call arguments to compact JSON text for transcript fallback rendering.

tags: tui, transcript, tools, json

extensions/adapters/presenters/tui/panels/transcript.fnl:46

fen.extensions.tui.panels.transcript.content-

(content- content)

Concatenate text blocks of an AgentToolResult content list.

extensions/adapters/presenters/tui/panels/transcript.fnl:57

fen.extensions.tui.panels.transcript.truncate

(truncate s n) -> string

Return text capped to n bytes with a visible truncation marker for tool-result previews.

tags: tui, transcript, truncate, tools

extensions/adapters/presenters/tui/panels/transcript.fnl:65

fen.extensions.tui.panels.transcript.count-lines

(count-lines s)

Count \n-terminated lines plus a trailing partial line if present.

extensions/adapters/presenters/tui/panels/transcript.fnl:73

fen.extensions.tui.panels.transcript.lookup-tool-call

(lookup-tool-call tool-call-id)

Walk back through state.transcript to find the matching :tool-call

extensions/adapters/presenters/tui/panels/transcript.fnl:111

fen.extensions.tui.panels.transcript.split-lines

function

Line-splitting helper alias exported for input wrapping and transcript-rendering tests.

tags: tui, transcript, lines, tests

extensions/adapters/presenters/tui/panels/transcript.fnl:142

fen.extensions.tui.panels.transcript.tool-call-short

(tool-call-short name args) -> string|nil

Format concise built-in tool call labels for the transcript and busy status row.

tags: tui, transcript, tools, format

extensions/adapters/presenters/tui/panels/transcript.fnl:198

fen.extensions.tui.panels.transcript.event-text

(event-text ev)

Return an event's display text. Streaming rows keep delta chunks to avoid

extensions/adapters/presenters/tui/panels/transcript.fnl:243

fen.extensions.tui.panels.transcript.invalidate-layout-cache!

(invalidate-layout-cache!)

Drop the transcript-wide row-count/index cache. Call when events are

extensions/adapters/presenters/tui/panels/transcript.fnl:384

fen.extensions.tui.panels.transcript.clear-event-render-cache!

(clear-event-render-cache! ev)

Drop all cached transcript rows for one event. Streaming delta ingestion

extensions/adapters/presenters/tui/panels/transcript.fnl:389

fen.extensions.tui.panels.transcript.lines-for-event

function

Cached event-to-row renderer alias exported for transcript viewport tests and diagnostics.

tags: tui, transcript, cache, render, tests

extensions/adapters/presenters/tui/panels/transcript.fnl:417

fen.extensions.tui.panels.transcript.viewport-lines

(viewport-lines width region-h)

Returns up to region-h display rows ending at the tail of the transcript.

extensions/adapters/presenters/tui/panels/transcript.fnl:549

fen.extensions.tui.panels.transcript.clamp-scroll-offset

(clamp-scroll-offset candidate input-rows)

Clamp an upward scroll candidate. Near the live tail, count only enough

extensions/adapters/presenters/tui/panels/transcript.fnl:569

fen.extensions.tui.panels.transcript.scrollbar-thumb

(scrollbar-thumb width region-h)

Return a zero-based thumb position and height for a REGION-H-row track.

extensions/adapters/presenters/tui/panels/transcript.fnl:582

fen.extensions.tui.panels.transcript.max-scroll

(max-scroll input-rows)

Maximum useful scroll-offset given current state — total wrapped line

extensions/adapters/presenters/tui/panels/transcript.fnl:620

fen.extensions.tui.panels.transcript.jump-to-user-message!

(jump-to-user-message! input-rows)

Jump to a user-authored message near the current transcript viewport.

extensions/adapters/presenters/tui/panels/transcript.fnl:633

fen.extensions.tui.panels.transcript.clear-render-caches!

(clear-render-caches!)

Drop cached rendered rows so a forced repaint recomputes all transcript

extensions/adapters/presenters/tui/panels/transcript.fnl:686

fen.extensions.tui.redraw

Module neighborhood graph: DOT · SVG

fen.extensions.tui.redraw module graph

fen.extensions.tui.redraw.ensure-defaults!

(ensure-defaults!) -> nil

Backfill persistent redraw and spinner scheduling fields after reloads.

tags: tui, redraw, state, reload

extensions/adapters/presenters/tui/redraw.fnl:7

fen.extensions.tui.redraw.invalidate!

(invalidate!)

Mark the TUI as needing a repaint on the next presenter-loop pass.

extensions/adapters/presenters/tui/redraw.fnl:20

fen.extensions.tui.redraw.invalidate-full!

(invalidate-full!)

Request a cache-clearing repaint. Used for resize/reload/display toggles

extensions/adapters/presenters/tui/redraw.fnl:25

fen.extensions.tui.select

Module neighborhood graph: DOT · SVG

fen.extensions.tui.select module graph

fen.extensions.tui.select.filtered

(filtered state) -> [Choice]

Return choices whose label or description fuzzy-match the current selector filter text, ranked best first.

tags: tui, select, filter, choices, fuzzy

extensions/adapters/presenters/tui/select.fnl:26

fen.extensions.tui.select.replace-choices!

(replace-choices! state choices) -> SelectState

Replace choices in an open selector while preserving the highlighted label when possible.

tags: tui, select, choices, async, refresh

extensions/adapters/presenters/tui/select.fnl:39

fen.extensions.tui.select.visible-window

(visible-window state max-rows) -> first-index item-count total-count

Compute the visible selector slice so the cursor stays on-screen while moving through long choice lists.

tags: tui, select, viewport, scroll, choices

extensions/adapters/presenters/tui/select.fnl:56

fen.extensions.tui.select.make-state

(make-state opts) -> SelectState

Create selector state, initializing its filter from the optional opts.initial-query value.

tags: tui, select, state

extensions/adapters/presenters/tui/select.fnl:73

fen.extensions.tui.select.step!

(step! state key) -> SelectState

Apply one synthetic selector key to filtering, cursor movement, selection, or cancellation state.

tags: tui, select, state, keyboard

extensions/adapters/presenters/tui/select.fnl:88

fen.extensions.tui.select.tui-select

(tui-select opts) -> Choice|nil

Run the interactive TUI select overlay when termbox is initialized and return the chosen record.

tags: tui, select, overlay, presenter

extensions/adapters/presenters/tui/select.fnl:236

fen.extensions.tui.selection

Module neighborhood graph: DOT · SVG

fen.extensions.tui.selection module graph

fen.extensions.tui.selection.ensure-defaults!

(ensure-defaults!)

Ensure the selection paint snapshot has a concrete table. state.selection

extensions/adapters/presenters/tui/selection.fnl:11

fen.extensions.tui.selection.row-cols

(row-cols text) -> number

Return the display-column width of a row's plain text in UTF-8 codepoints.

tags: tui, selection, utf8, layout

extensions/adapters/presenters/tui/selection.fnl:33

fen.extensions.tui.selection.active?

(active?) -> boolean

Whether a transcript selection is currently anchored.

tags: tui, selection, state

extensions/adapters/presenters/tui/selection.fnl:54

fen.extensions.tui.selection.has-span?

(has-span?)

A selection whose anchor and cursor are the same cell is a plain click,

extensions/adapters/presenters/tui/selection.fnl:64

fen.extensions.tui.selection.clear!

(clear!) -> boolean

Drop any active selection, returning whether one was present so callers can decide to repaint.

tags: tui, selection, state

extensions/adapters/presenters/tui/selection.fnl:73

fen.extensions.tui.selection.start!

(start! x y) -> nil

Begin a selection with the anchor and cursor at screen cell (x, y).

tags: tui, selection, mouse

extensions/adapters/presenters/tui/selection.fnl:83

fen.extensions.tui.selection.selectable-cell?

(selectable-cell? x y snapshot)

True only when (x, y) is inside text recorded by paint-transcript.

extensions/adapters/presenters/tui/selection.fnl:101

fen.extensions.tui.selection.clamp-to-snapshot

(clamp-to-snapshot x y snapshot)

Clamp drag/release coordinates to the currently painted transcript band.

extensions/adapters/presenters/tui/selection.fnl:111

fen.extensions.tui.selection.start-if-selectable!

(start-if-selectable! x y) -> boolean

Begin a selection only when the mouse press lands on currently painted transcript text.

tags: tui, selection, mouse, transcript

extensions/adapters/presenters/tui/selection.fnl:127

fen.extensions.tui.selection.update-clamped!

(update-clamped! x y) -> boolean

Move the selection cursor after clamping to the visible transcript snapshot; return false when no snapshot exists.

tags: tui, selection, mouse, transcript

extensions/adapters/presenters/tui/selection.fnl:139

fen.extensions.tui.selection.update!

(update! x y) -> nil

Move the selection cursor to screen cell (x, y) during a drag.

tags: tui, selection, mouse

extensions/adapters/presenters/tui/selection.fnl:152

fen.extensions.tui.selection.finish!

(finish!) -> nil

Mark the in-progress drag complete while keeping the selection highlighted until cleared.

tags: tui, selection, mouse

extensions/adapters/presenters/tui/selection.fnl:161

fen.extensions.tui.selection.normalized

(normalized sel)

Return the selection ordered so start precedes end in reading order

extensions/adapters/presenters/tui/selection.fnl:170

fen.extensions.tui.selection.row-range

(row-range sel y row-cols)

Inclusive [from, to] column range selected on screen row y. Middle rows

extensions/adapters/presenters/tui/selection.fnl:181

fen.extensions.tui.selection.row-highlight

(row-highlight sel y text)

For painting: return (from-col, selected-substring) for screen row y

extensions/adapters/presenters/tui/selection.fnl:195

fen.extensions.tui.selection.begin-paint!

(begin-paint!) -> nil

Reset the per-frame transcript paint snapshot before rows are recorded for later selection extraction.

tags: tui, selection, paint, snapshot

extensions/adapters/presenters/tui/selection.fnl:207

fen.extensions.tui.selection.record-row!

(record-row! y text) -> nil

Record the plain text painted at screen row y so a later copy can extract the selected substring.

tags: tui, selection, paint, snapshot

extensions/adapters/presenters/tui/selection.fnl:215

fen.extensions.tui.selection.extract

(extract sel snapshot)

Pure extraction: return the text covered by sel given a paint snapshot

extensions/adapters/presenters/tui/selection.fnl:230

fen.extensions.tui.selection.selected-text

(selected-text) -> string

Return the currently selected transcript text using the live paint snapshot.

tags: tui, selection, copy

extensions/adapters/presenters/tui/selection.fnl:251

fen.extensions.tui.side_chat

Module neighborhood graph: DOT · SVG

fen.extensions.tui.side_chat module graph

fen.extensions.tui.side_chat.on-event!

(on-event! id ev)

Ingest a side-agent event into only its workspace.

extensions/adapters/presenters/tui/side_chat.fnl:177

fen.extensions.tui.side_chat.submit!

(submit! ws line ?opts)

Submit only to WS's private agent, optionally queueing an initial command.

extensions/adapters/presenters/tui/side_chat.fnl:213

fen.extensions.tui.side_chat.open!

(open! runtime ?initial)

Open or focus the singleton btw workspace and optionally submit a turn.

extensions/adapters/presenters/tui/side_chat.fnl:252

fen.extensions.tui.side_chat.tick!

(tick!)

Advance live side turns and drain cancelled turns without blocking the UI.

extensions/adapters/presenters/tui/side_chat.fnl:359

fen.extensions.tui.side_chat.reset!

(reset!)

Clear volatile side-chat resources between isolated presenter tests.

extensions/adapters/presenters/tui/side_chat.fnl:371

fen.extensions.tui.side_chat.busy?

[]

extensions/adapters/presenters/tui/side_chat.fnl:385

fen.extensions.tui.side_chat.use-last!

(use-last! ?ws)

Replace the main input draft with the side agent's last assistant reply.

extensions/adapters/presenters/tui/side_chat.fnl:406

fen.extensions.tui.side_chat.request-cancel!

(request-cancel! ws)

Request cooperative cancellation without discarding the side conversation.

extensions/adapters/presenters/tui/side_chat.fnl:424

fen.extensions.tui.side_chat.cancel!

(cancel! ws)

Cancel one side conversation, reaping its coroutine before tab removal.

extensions/adapters/presenters/tui/side_chat.fnl:433

fen.extensions.tui.side_chat.WORKSPACE-ID

extensions/adapters/presenters/tui/side_chat.fnl:459

fen.extensions.tui.side_chat.READ-ONLY-TOOLS

extensions/adapters/presenters/tui/side_chat.fnl:460

fen.extensions.tui.state

Module neighborhood graph: DOT · SVG

fen.extensions.tui.state module graph

fen.extensions.tui.state.tb-initialized?

boolean

Persistent termbox2 lifecycle flag used to keep TUI init and shutdown idempotent across reloads.

tags: tui, state, termbox, reload

extensions/adapters/presenters/tui/state.fnl:3

fen.extensions.tui.state.tb-init-failed?

boolean

Flag set when termbox2 initialization failed so startup can print a clean error and avoid unsafe teardown.

tags: tui, state, termbox, errors

extensions/adapters/presenters/tui/state.fnl:9

fen.extensions.tui.state.tb-cols

number

Last known terminal column count used by draw/layout code after termbox resize events.

tags: tui, state, termbox, layout

extensions/adapters/presenters/tui/state.fnl:15

fen.extensions.tui.state.tb-rows

number

Last known terminal row count used by draw/layout code after termbox resize events.

tags: tui, state, termbox, layout

extensions/adapters/presenters/tui/state.fnl:21

fen.extensions.tui.state.dirty?

boolean

Redraw scheduling flag set when visible TUI state changed and the next presenter loop should repaint.

tags: tui, state, redraw

extensions/adapters/presenters/tui/state.fnl:27

fen.extensions.tui.state.force-redraw?

boolean

Strong redraw flag that clears render caches and blanks the presenter before repainting after resize, reload, or display toggles.

tags: tui, state, redraw, cache

extensions/adapters/presenters/tui/state.fnl:33

fen.extensions.tui.state.paint-layout

extensions/adapters/presenters/tui/state.fnl:243

fen.extensions.tui.state.workspaces

[Workspace]

Persistent presenter-tab records, including metadata, input mode, activity, source identity, and per-tab view state.

tags: tui, state, tabs, workspaces, reload

extensions/adapters/presenters/tui/state.fnl:39

fen.extensions.tui.state.active-workspace-id

string|keyword

Id of the workspace whose transcript, editor, selection, and render caches are projected through the legacy flat state fields.

tags: tui, state, tabs, workspaces, focus

extensions/adapters/presenters/tui/state.fnl:45

fen.extensions.tui.state.main-session

extensions/adapters/presenters/tui/state.fnl:243

fen.extensions.tui.state.closed-subagent-workspaces

table

Set of explicitly closed subagent tab ids so retained run events do not recreate hidden tabs.

tags: tui, state, tabs, subagent

extensions/adapters/presenters/tui/state.fnl:51

fen.extensions.tui.state.spinner-ticks

number

Event-loop tick counter used to pace busy spinner animation without adding another wall-clock dependency.

tags: tui, state, animation

extensions/adapters/presenters/tui/state.fnl:57

fen.extensions.tui.state.spinner-interval-ticks

number

Number of event-loop ticks between spinner frame advances while the agent is busy.

tags: tui, state, animation

extensions/adapters/presenters/tui/state.fnl:63

fen.extensions.tui.state.animations?

boolean

Global animation toggle controlling whether busy indicators use animated spinner frames or static fallback glyphs.

tags: tui, state, animation, settings

extensions/adapters/presenters/tui/state.fnl:69

fen.extensions.tui.state.transcript

[PresenterEvent]

Append-only preprocessed transcript event log used as the source of truth for TUI rendering.

tags: tui, state, transcript

extensions/adapters/presenters/tui/state.fnl:75

fen.extensions.tui.state.streaming-assistant-rows

table

Lookup table from streaming row keys to transcript rows so delta ingestion can update active assistant output efficiently.

tags: tui, state, transcript, streaming

extensions/adapters/presenters/tui/state.fnl:81

fen.extensions.tui.state.transcript-layout-cache

table|nil

Width/display-keyed wrapped transcript layout cache used for fast viewport and max-scroll calculations.

tags: tui, state, transcript, layout

extensions/adapters/presenters/tui/state.fnl:87

fen.extensions.tui.state.scroll-offset

number

Number of wrapped transcript lines above the tail that anchor the viewport when the user scrolls up.

tags: tui, state, scroll, transcript

extensions/adapters/presenters/tui/state.fnl:93

fen.extensions.tui.state.new-content-below?

boolean

Set while the transcript is scroll-locked and newly appended content is available below the viewport.

tags: tui, state, scroll, transcript, follow

extensions/adapters/presenters/tui/state.fnl:99

fen.extensions.tui.state.last-user-jump-index

number|nil

Transcript event index targeted by the last user-message jump, used so repeated keypresses walk to previous user messages.

tags: tui, state, scroll, transcript, navigation

extensions/adapters/presenters/tui/state.fnl:105

fen.extensions.tui.state.input-buf

string

Current multi-line input buffer contents, including literal newlines and paste markers before submit expansion.

tags: tui, state, input

extensions/adapters/presenters/tui/state.fnl:111

fen.extensions.tui.state.input-cursor

number

Byte offset cursor position inside input-buf for terminal input editing.

tags: tui, state, input

extensions/adapters/presenters/tui/state.fnl:117

fen.extensions.tui.state.paste-active?

boolean

Bracketed-paste mode flag indicating incoming bytes should accumulate in paste-buffer instead of editing input directly.

tags: tui, state, paste, input

extensions/adapters/presenters/tui/state.fnl:123

fen.extensions.tui.state.paste-buffer

string

Accumulator for the current bracketed paste before it is compacted into an input marker.

tags: tui, state, paste, input

extensions/adapters/presenters/tui/state.fnl:129

fen.extensions.tui.state.paste-counter

number

Monotonic id counter for large pasted payload markers stored in the pastes table.

tags: tui, state, paste, input

extensions/adapters/presenters/tui/state.fnl:135

fen.extensions.tui.state.pastes

table

Table of compact paste marker ids to full pasted text, expanded back into input on submit.

tags: tui, state, paste, input

extensions/adapters/presenters/tui/state.fnl:141

fen.extensions.tui.state.input-hint

{:text string :key string}|nil

Pending contextual suggestion from a :hint event, shown as the empty main editor's placeholder until the draft is edited, Esc, or a conversation reset.

tags: tui, state, input, hint

extensions/adapters/presenters/tui/state.fnl:225

fen.extensions.tui.state.input-hints-shown

{string true}

Set of :hint keys already shown this process so one suggestion is never repeated.

tags: tui, state, input, hint

extensions/adapters/presenters/tui/state.fnl:231

fen.extensions.tui.state.selection

table|nil

Active transcript mouse selection ({anchor cursor dragging?}) in screen-cell coordinates, or nil when nothing is selected.

tags: tui, state, selection, mouse, copy

extensions/adapters/presenters/tui/state.fnl:165

fen.extensions.tui.state.selection-paint

table|nil

Per-frame snapshot of plain transcript text keyed by screen row, filled during paint so selection copy can extract the visible selected text.

tags: tui, state, selection, paint, copy

extensions/adapters/presenters/tui/state.fnl:171

fen.extensions.tui.state.copy-status

table|nil

Transient copy-feedback record ({ok? bytes reason at-seconds}) surfaced in the status line after a selection copy attempt.

tags: tui, state, selection, copy, status

extensions/adapters/presenters/tui/state.fnl:177

fen.extensions.tui.state.history

[string]

In-process prompt history ring containing submitted prompts for up/down navigation.

tags: tui, state, history, input

extensions/adapters/presenters/tui/state.fnl:147

fen.extensions.tui.state.history-pos

number

Prompt history navigation position where zero means the current live draft and positive values index backward from the end.

tags: tui, state, history, input

extensions/adapters/presenters/tui/state.fnl:153

fen.extensions.tui.state.history-draft

string

Saved live input draft restored when the user navigates back out of history.

tags: tui, state, history, input

extensions/adapters/presenters/tui/state.fnl:159

fen.extensions.tui.state.expand-tool-results?

boolean

Global /expand toggle controlling whether tool-result transcript events show full truncated bodies or one-line summaries.

tags: tui, state, transcript, tools

extensions/adapters/presenters/tui/state.fnl:183

fen.extensions.tui.state.markdown?

boolean

Global /markdown toggle controlling whether assistant text renders through the terminal markdown renderer or as plain text.

tags: tui, state, markdown, settings

extensions/adapters/presenters/tui/state.fnl:189

fen.extensions.tui.state.hide-thinking-block?

boolean

Global /thinking toggle controlling whether assistant reasoning blocks render visibly or collapse to a compact Thinking label.

tags: tui, state, thinking, settings

extensions/adapters/presenters/tui/state.fnl:195

fen.extensions.tui.state.pending-quit?

boolean

Two-press ctrl-c confirmation flag for idle quit behavior, cleared by any non-quit key.

tags: tui, state, input, quit

extensions/adapters/presenters/tui/state.fnl:201

fen.extensions.tui.state.alt-pending?

boolean

One-tick bare-Esc state used to distinguish dismiss from Alt-key combinations in INPUT_ESC mode.

tags: tui, state, input, keyboard

extensions/adapters/presenters/tui/state.fnl:207

fen.extensions.tui.state.on-tick

function|nil

Cooperative tick callback published by the run loop so nested selectors can keep agent coroutines and HTTP drains moving.

tags: tui, state, cooperative, input

extensions/adapters/presenters/tui/state.fnl:213

fen.extensions.tui.state.cancel-pressed?

boolean

Busy-turn ctrl-c flag recording that cancellation was requested before the agent loop observes and clears it.

tags: tui, state, cancel, input

extensions/adapters/presenters/tui/state.fnl:219

fen.extensions.tui.state.last-stall-warn-ms

extensions/adapters/presenters/tui/state.fnl:243

fen.extensions.tui.state.status-info

table

Persistent status-line model, token, queue, retry, thinking, cancellation, elapsed-time, and spinner metadata.

tags: tui, state, status

extensions/adapters/presenters/tui/state.fnl:237

fen.extensions.tui.stories.init

Module neighborhood graph: DOT · SVG

fen.extensions.tui.stories.init module graph

fen.extensions.tui.stories.init.reset!

(reset! ?opts)

Reset persistent TUI state fields used by story fixtures. This avoids the

extensions/adapters/presenters/tui/stories/init.fnl:32

fen.extensions.tui.stories.init.list

(list) -> [StoryMetadata]

List discoverable TUI story names, descriptions, tags, and default dimensions.

tags: tui, stories, registry, testing

extensions/adapters/presenters/tui/stories/init.fnl:197

fen.extensions.tui.stories.init.find

(find name) -> Story|nil

Return a TUI story fixture by keyword/string name.

tags: tui, stories, registry, testing

extensions/adapters/presenters/tui/stories/init.fnl:206

fen.extensions.tui.stories.init.setup!

(setup! name ?opts)

Reset and seed a named story. Optional opts may override :cols/:rows.

extensions/adapters/presenters/tui/stories/init.fnl:218

fen.extensions.tui.workspaces

Module neighborhood graph: DOT · SVG

fen.extensions.tui.workspaces module graph

fen.extensions.tui.workspaces.KINDS

extensions/adapters/presenters/tui/workspaces.fnl:62

fen.extensions.tui.workspaces.kind-spec

[ws]

extensions/adapters/presenters/tui/workspaces.fnl:64

fen.extensions.tui.workspaces.capabilities-for

(capabilities-for ws)

Derive workspace authority from its kind and status in one place.

extensions/adapters/presenters/tui/workspaces.fnl:67

fen.extensions.tui.workspaces.input-mode

(input-mode ws)

Display projection of the workspace's capabilities, which stay authoritative.

extensions/adapters/presenters/tui/workspaces.fnl:75

fen.extensions.tui.workspaces.closable?

[ws]

extensions/adapters/presenters/tui/workspaces.fnl:85

fen.extensions.tui.workspaces.status?

[ws]

extensions/adapters/presenters/tui/workspaces.fnl:89

fen.extensions.tui.workspaces.status-info

(status-info ws)

Return the busy status model shown while WS is displayed.

extensions/adapters/presenters/tui/workspaces.fnl:93

fen.extensions.tui.workspaces.subagent?

[ws]

extensions/adapters/presenters/tui/workspaces.fnl:103

fen.extensions.tui.workspaces.agent?

[ws]

extensions/adapters/presenters/tui/workspaces.fnl:107

fen.extensions.tui.workspaces.sort-rank

[ws]

extensions/adapters/presenters/tui/workspaces.fnl:111

fen.extensions.tui.workspaces.ensure!

[]

extensions/adapters/presenters/tui/workspaces.fnl:191

fen.extensions.tui.workspaces.active

[]

extensions/adapters/presenters/tui/workspaces.fnl:208

fen.extensions.tui.workspaces.find

[id]

extensions/adapters/presenters/tui/workspaces.fnl:211

fen.extensions.tui.workspaces.allows?

(allows? capability)

Return whether the active workspace grants CAPABILITY.

extensions/adapters/presenters/tui/workspaces.fnl:215

fen.extensions.tui.workspaces.accepts-input?

[]

extensions/adapters/presenters/tui/workspaces.fnl:223

fen.extensions.tui.workspaces.cancel-active!

(cancel-active!)

Request cancellation through the active workspace kind, if it owns a running turn.

extensions/adapters/presenters/tui/workspaces.fnl:226

fen.extensions.tui.workspaces.capture-active!

[]

extensions/adapters/presenters/tui/workspaces.fnl:254

fen.extensions.tui.workspaces.activate!

[id]

extensions/adapters/presenters/tui/workspaces.fnl:258

fen.extensions.tui.workspaces.create!

(create! spec)

Create one presenter tab record without teaching core sessions about tabs.

extensions/adapters/presenters/tui/workspaces.fnl:272

fen.extensions.tui.workspaces.with-main!

(with-main! f)

Run F against the main transcript without changing the tab being viewed.

extensions/adapters/presenters/tui/workspaces.fnl:286

fen.extensions.tui.workspaces.close!

(close! id)

Close a presenter workspace according to its kind policy.

extensions/adapters/presenters/tui/workspaces.fnl:291

fen.extensions.tui.workspaces.next!

[delta]

extensions/adapters/presenters/tui/workspaces.fnl:317

fen.extensions.tui.workspaces.switcher-choices

(switcher-choices)

Return api.ui.select choices for the existing modal focus path.

extensions/adapters/presenters/tui/workspaces.fnl:328

fen.extensions.tui.workspaces.submit!

(submit! line handlers)

Dispatch submission through the active kind's single policy entry.

extensions/adapters/presenters/tui/workspaces.fnl:341

fen.extensions.tui.workspaces.submit-steering!

(submit-steering! line)

Route a subagent tab's steering draft through retained run state.

extensions/adapters/presenters/tui/workspaces.fnl:348

fen.extensions.tui.workspaces.active-status-info

(active-status-info)

Return the busy status model for the displayed workspace.

extensions/adapters/presenters/tui/workspaces.fnl:399

fen.extensions.tui.workspaces.append-active!

(append-active! ev)

Append one presenter-local row to the displayed workspace.

extensions/adapters/presenters/tui/workspaces.fnl:403

fen.extensions.tui.workspaces.append-to!

(append-to! id ev)

Append one canonical event to a workspace without touching main state.

extensions/adapters/presenters/tui/workspaces.fnl:407

fen.extensions.tui.workspaces.refresh!

(refresh! ws)

Refresh derived kind metadata after a workspace status transition.

extensions/adapters/presenters/tui/workspaces.fnl:419

fen.extensions.tui.workspaces.sort-workspaces!

[]

extensions/adapters/presenters/tui/workspaces.fnl:549

fen.extensions.tui.workspaces.sync-subagents!

(sync-subagents!)

Project bounded subagent event streams into read-only workspaces.

extensions/adapters/presenters/tui/workspaces.fnl:556

fen.extensions.tui.workspaces.list

[]

extensions/adapters/presenters/tui/workspaces.fnl:597

fen.extensions.web

Module neighborhood graph: DOT · SVG

fen.extensions.web module graph

fen.extensions.web.init!

(init! ctx) -> nil

Store the presenter context and initialize the web server listener for browser clients.

tags: web, presenter, lifecycle, server

extensions/adapters/presenters/web/init.fnl:69

fen.extensions.web.shutdown

(shutdown ctx) -> nil

Clear the web presenter context and close server/client resources during presenter shutdown.

tags: web, presenter, lifecycle, server

extensions/adapters/presenters/web/init.fnl:78

fen.extensions.web.run

(run ctx) -> nil

Run the web presenter server loop with the current context until the presenter is asked to quit.

tags: web, presenter, lifecycle, server

extensions/adapters/presenters/web/init.fnl:87

fen.extensions.web.register

[api]

extensions/adapters/presenters/web/init.fnl:96

fen.extensions.web.ingest

Module neighborhood graph: DOT · SVG

fen.extensions.web.ingest module graph

fen.extensions.web.ingest.append-event

(append-event ev) -> nil

Ingest one bus event into web transcript and status state, including streaming assistant deltas and tool summaries.

tags: web, ingest, events, transcript, status

extensions/adapters/presenters/web/ingest.fnl:75

fen.extensions.web.layout

Module neighborhood graph: DOT · SVG

fen.extensions.web.layout module graph

fen.extensions.web.layout.snapshot

(snapshot ctx?) -> table

Build the JSON-serializable browser layout snapshot from status fragments, panels, transcript rows, select state, and reload sequence.

tags: web, layout, snapshot, json

extensions/adapters/presenters/web/layout.fnl:119

fen.extensions.web.layout.html-snapshot

(html-snapshot ctx?) -> table

Build a browser layout snapshot with pre-rendered HTML fragments for status, transcript, panels, and select state.

tags: web, layout, snapshot, html

extensions/adapters/presenters/web/layout.fnl:193

fen.extensions.web.page

Module neighborhood graph: DOT · SVG

fen.extensions.web.page module graph

fen.extensions.web.page.render

function

Hiccup document renderer alias exported for browser page tests and reuse within web snapshots.

tags: web, page, html, render, tests

extensions/adapters/presenters/web/page.fnl:70

fen.extensions.web.page.render-node

function

Single-node HTML renderer alias exported for focused escaping and element-rendering tests.

tags: web, page, html, render, tests

extensions/adapters/presenters/web/page.fnl:77

fen.extensions.web.page.html

(html) -> string

Render the static browser presenter page with embedded CSS and JavaScript for HTTP/SSE interaction.

tags: web, page, html, browser

extensions/adapters/presenters/web/page.fnl:236

fen.extensions.web.server

Module neighborhood graph: DOT · SVG

fen.extensions.web.server module graph

fen.extensions.web.server.parse-request

(parse-request buf) -> Request|nil

Parse a buffered HTTP request once headers and the declared body length have arrived.

tags: web, server, http, parse

extensions/adapters/presenters/web/server.fnl:67

fen.extensions.web.server.broadcast!

(broadcast! state ctx) -> nil

Queue a layout SSE frame to connected clients when the rendered browser snapshot changes.

tags: web, server, sse, broadcast

extensions/adapters/presenters/web/server.fnl:249

fen.extensions.web.server.init

(init ctx state) -> nil

Start the nonblocking LuaSocket HTTP server for the web presenter if it is not already listening.

tags: web, server, lifecycle, socket

extensions/adapters/presenters/web/server.fnl:257

fen.extensions.web.server.shutdown

(shutdown ctx state) -> nil

Stop the web server, close HTTP and SSE clients, clear queues, and mark the presenter as quitting.

tags: web, server, lifecycle, socket

extensions/adapters/presenters/web/server.fnl:273

fen.extensions.web.server.tick

(tick socket state ctx) -> nil

Service accepts, HTTP requests, pending inputs, cooperative ticks, SSE broadcasts, flushes, and pacing sleep once.

tags: web, server, loop, sse

extensions/adapters/presenters/web/server.fnl:289

fen.extensions.web.server.wait-select

(wait-select ctx state opts) -> Choice|nil

Publish an active browser select prompt, service the web loop until a reply arrives, and return the chosen choice.

tags: web, server, select, ui

extensions/adapters/presenters/web/server.fnl:312

fen.extensions.web.server.run

(run ctx state) -> nil

Run the web server loop until shutdown sets the persistent quit flag.

tags: web, server, loop, lifecycle

extensions/adapters/presenters/web/server.fnl:337

fen.extensions.web.state

Module neighborhood graph: DOT · SVG

fen.extensions.web.state module graph

fen.extensions.web.state.server

server|nil

Active web server handle, kept outside reloadable modules so the listening socket can survive behavior reloads.

tags: web, state, server, reload

extensions/adapters/presenters/web/state.fnl:4

fen.extensions.web.state.host

string

Interface address used by the web presenter when binding its HTTP/SSE server.

tags: web, state, server, config

extensions/adapters/presenters/web/state.fnl:10

fen.extensions.web.state.port

number

TCP port used by the web presenter server and advertised browser URL.

tags: web, state, server, config

extensions/adapters/presenters/web/state.fnl:16

fen.extensions.web.state.clients

[client]

Connected web client records tracked by the presenter server for lifecycle and cleanup.

tags: web, state, clients

extensions/adapters/presenters/web/state.fnl:22

fen.extensions.web.state.sse-clients

[client]

Active Server-Sent Events client connections receiving transcript/status snapshots.

tags: web, state, clients, sse

extensions/adapters/presenters/web/state.fnl:28

fen.extensions.web.state.pending-inputs

[string]

User inputs submitted by browser clients and queued for the presenter loop to hand to the agent.

tags: web, state, input, queue

extensions/adapters/presenters/web/state.fnl:34

fen.extensions.web.state.quit?

boolean

Presenter loop shutdown flag set by web controls when the browser requests session termination.

tags: web, state, lifecycle

extensions/adapters/presenters/web/state.fnl:40

fen.extensions.web.state.last-snapshot

string

Last serialized browser snapshot used to avoid redundant SSE broadcasts when visible state has not changed.

tags: web, state, sse, cache

extensions/adapters/presenters/web/state.fnl:46

fen.extensions.web.state.last-broadcast

number

Timestamp/counter of the last web snapshot broadcast used to pace browser updates.

tags: web, state, sse, cache

extensions/adapters/presenters/web/state.fnl:52

fen.extensions.web.state.client-reload-seq

number

Monotonic sequence bumped to tell browser clients that frontend assets or presenter behavior should reload.

tags: web, state, reload, clients

extensions/adapters/presenters/web/state.fnl:58

fen.extensions.web.state.select-seq

number

Monotonic id counter for active web select prompts so browser replies can be matched to the current prompt.

tags: web, state, select, input

extensions/adapters/presenters/web/state.fnl:64

fen.extensions.web.state.active-select

table|nil

Currently active browser select prompt, including choices and response bookkeeping for presenter UI APIs.

tags: web, state, select, input

extensions/adapters/presenters/web/state.fnl:70

fen.extensions.web.state.presenter-ctx

table|nil

Current web presenter runtime context captured for server handlers that need to submit input or request cancellation.

tags: web, state, presenter

extensions/adapters/presenters/web/state.fnl:76

fen.extensions.web.state.transcript

[PresenterEvent]

Persistent web transcript event log used to build browser snapshots after reloads or client reconnects.

tags: web, state, transcript

extensions/adapters/presenters/web/state.fnl:82

fen.extensions.web.state.status-info

table

Web status metadata for provider/model, context estimates, queues, running tool, thinking, cancellation, and turn timing.

tags: web, state, status

extensions/adapters/presenters/web/state.fnl:88

Utilities (fen.util.*)

fen.util.args

Module neighborhood graph: DOT · SVG

fen.util.args module graph

fen.util.args.nth-arg

(nth-arg args n) -> string|nil

Extract the nth whitespace-delimited argument from a slash-command argument string.

tags: util, args, commands

packages/util/src/fen/util/args.fnl:5

fen.util.args.first-arg

(first-arg args) -> string|nil

Extract the first whitespace-delimited argument from a slash-command argument string.

tags: util, args, commands

packages/util/src/fen/util/args.fnl:15

fen.util.args.rest-args

(rest-args args) -> string

Return everything after the first whitespace-delimited argument, trimmed; nil and missing rest become "".

tags: util, args, commands

packages/util/src/fen/util/args.fnl:23

fen.util.base64

Module neighborhood graph: DOT · SVG

fen.util.base64 module graph

fen.util.base64.decode-standard

(decode-standard s)

Decode a standard base64 string (with optional = padding) to its raw

packages/util/src/fen/util/base64.fnl:15

fen.util.base64.decode-url

(decode-url s)

Decode a base64url string (no padding required, uses - and _)

packages/util/src/fen/util/base64.fnl:40

fen.util.base64.encode-standard

(encode-standard bytes)

Encode a raw byte string as standard base64 with = padding.

packages/util/src/fen/util/base64.fnl:53

fen.util.base64.encode-url

(encode-url bytes)

Encode a raw byte string as base64url: standard alphabet with +→-,

packages/util/src/fen/util/base64.fnl:85

fen.util.checksum

Module neighborhood graph: DOT · SVG

fen.util.checksum module graph

fen.util.checksum.file-fingerprint

(file-fingerprint path) -> table|nil

Compute a small non-cryptographic checksum/size fingerprint for a file via the injectable backend, used by reload-change diagnostics.

tags: util, checksum, reload

packages/util/src/fen/util/checksum/init.fnl:8

fen.util.checksum.module-path

(module-path modname) -> string|nil

Resolve a module name to its active source file through the injectable backend so reload diagnostics can fingerprint it.

tags: util, checksum, modules

packages/util/src/fen/util/checksum/init.fnl:16

fen.util.checksum.module-fingerprint

(module-fingerprint modname) -> table|nil

Return a module's fingerprint (version/etag) through the injectable backend; the default resolves and hashes the source file, returning nil when it has no discoverable source.

tags: util, checksum, modules, reload

packages/util/src/fen/util/checksum/init.fnl:24

fen.util.checksum.backends.default

Module neighborhood graph: DOT · SVG

fen.util.checksum.backends.default module graph

fen.util.checksum.backends.default.file-fingerprint

(file-fingerprint path) -> table|nil

Compute a small non-cryptographic checksum/size fingerprint for a file via io.open, used by reload-change diagnostics.

tags: util, checksum, reload, backend

packages/util/src/fen/util/checksum/backends/default.fnl:3

fen.util.checksum.backends.default.module-path

(module-path modname) -> string|nil

Resolve a module name through package.path or its .fnl dev-path analogue so reload diagnostics can fingerprint the active source file.

tags: util, checksum, modules, backend

packages/util/src/fen/util/checksum/backends/default.fnl:58

fen.util.checksum.backends.default.module-fingerprint

(module-fingerprint modname) -> table|nil

Resolve and fingerprint a Lua module source file via searchpath+io.open, returning nil when the module has no discoverable source file.

tags: util, checksum, modules, reload, backend

packages/util/src/fen/util/checksum/backends/default.fnl:71

fen.util.clock

Module neighborhood graph: DOT · SVG

fen.util.clock module graph

fen.util.clock.monotonic-ms

(monotonic-ms) -> number

Return a monotonic clock reading in milliseconds via the injectable clock backend.

tags: util, clock, time, monotonic

packages/util/src/fen/util/clock/init.fnl:8

fen.util.clock.sleep-ms

(sleep-ms ms) -> nil

Sleep for the given number of milliseconds via the injectable clock backend.

tags: util, clock, time, sleep

packages/util/src/fen/util/clock/init.fnl:16

fen.util.clock.backends.native

Module neighborhood graph: DOT · SVG

fen.util.clock.backends.native module graph

fen.util.clock.backends.native.monotonic-ms

(monotonic-ms) -> number

Return a monotonic millisecond reading from the fen_process native clock, erroring if it is unavailable.

tags: util, clock, time, monotonic, native

packages/util/src/fen/util/clock/backends/native.fnl:7

fen.util.clock.backends.native.sleep-ms

(sleep-ms ms) -> nil

Sleep for ms milliseconds using the fen_process native sleep.

tags: util, clock, time, sleep, native

packages/util/src/fen/util/clock/backends/native.fnl:16

fen.util.coroutines

Module neighborhood graph: DOT · SVG

fen.util.coroutines module graph

fen.util.coroutines.register-inheritable-hook!

(register-inheritable-hook! hook on-create?) -> nil

Explicitly allow one debug hook to propagate to fen-owned cooperative child coroutines, optionally observing each child at creation.

tags: util, coroutine, profiler, debug

packages/util/src/fen/util/coroutines.fnl:11

fen.util.coroutines.unregister-inheritable-hook!

(unregister-inheritable-hook! hook) -> nil

Stop propagating a previously registered debug hook to new fen-owned cooperative coroutines.

tags: util, coroutine, profiler, debug

packages/util/src/fen/util/coroutines.fnl:20

fen.util.coroutines.create

(create f)

Create a coroutine, inheriting only debug hooks that opted into fen's

packages/util/src/fen/util/coroutines.fnl:28

fen.util.dev_overlay

Module neighborhood graph: DOT · SVG

fen.util.dev_overlay module graph

fen.util.dev_overlay.validate-worktree

(validate-worktree worktree) -> OverlayRoots|nil, string|nil

Canonicalize a trusted development worktree and require its core, util, CLI, and extension source directories.

tags: util, development, reload, overlay

packages/util/src/fen/util/dev_overlay.fnl:25

fen.util.dev_overlay.switch-worktree!

(switch-worktree! worktree) -> OverlayRoots|nil, string|nil

Validate and install a replaceable trusted worktree overlay for Lua/Fennel core modules and flat first-party extensions.

tags: util, development, reload, overlay

packages/util/src/fen/util/dev_overlay.fnl:75

fen.util.file_mutex

Module neighborhood graph: DOT · SVG

fen.util.file_mutex module graph

fen.util.file_mutex.with-file

(with-file path yield! fn-body) -> any

Run fn-body while holding the FIFO mutex for path's canonical filesystem spelling, releasing it even when fn-body throws.

tags: util, filesystem, mutex, cooperative, reload

packages/util/src/fen/util/file_mutex.fnl:143

fen.util.file_mutex.canonical-path

(canonical-path path)

Resolve a path without forking for ordinary spellings; use readlink only

packages/util/src/fen/util/file_mutex.fnl:69

fen.util.file_mutex_state

Module neighborhood graph: DOT · SVG

fen.util.file_mutex_state module graph

fen.util.file_mutex_state.locks

packages/util/src/fen/util/file_mutex_state.fnl:3

fen.util.file_mutex_state.canonical-cache

packages/util/src/fen/util/file_mutex_state.fnl:3

fen.util.file_mutex_state.canonical-cache-size

packages/util/src/fen/util/file_mutex_state.fnl:3

fen.util.file_mutex_state.canonical-cache-cwd

packages/util/src/fen/util/file_mutex_state.fnl:3

fen.util.flat_extensions

Module neighborhood graph: DOT · SVG

fen.util.flat_extensions module graph

fen.util.flat_extensions.build-map

(build-map roots)

Walk each root recursively for manifest dirs and return a snake->dir map.

packages/util/src/fen/util/flat_extensions.fnl:117

fen.util.flat_extensions.resolve-fnl

(resolve-fnl map modname)

Return the flat .fnl path for fen.extensions.<snake>[.<rest>] or nil.

packages/util/src/fen/util/flat_extensions.fnl:131

fen.util.flat_extensions.make-searcher

(make-searcher fennel map)

Build a Lua package.searchers entry that resolves flat extensions.

packages/util/src/fen/util/flat_extensions.fnl:146

fen.util.flat_extensions.install!

(install! opts)

Convenience installer. opts.roots is the list of extension roots to

packages/util/src/fen/util/flat_extensions.fnl:170

fen.util.frontmatter

Module neighborhood graph: DOT · SVG

fen.util.frontmatter module graph

fen.util.frontmatter.parse

(parse text) -> (values fields body) | nil

Parse leading --- frontmatter out of a string. Returns nil when

tags: util, frontmatter, parsing

packages/util/src/fen/util/frontmatter.fnl:18

fen.util.frontmatter.parse-file

(parse-file path ?with-body) -> (values fields body) | (values nil reason err)

Read path and parse its frontmatter line-by-line, stopping at the

tags: util, frontmatter, parsing

packages/util/src/fen/util/frontmatter.fnl:59

fen.util.fuzzy

Module neighborhood graph: DOT · SVG

fen.util.fuzzy module graph

fen.util.fuzzy.score

(score query candidate) -> number|nil

Return a fuzzy-match score when all query characters appear in order within candidate; higher is better.

tags: util, fuzzy, search

packages/util/src/fen/util/fuzzy.fnl:13

fen.util.fuzzy.edit-distance

(edit-distance a b) -> number

Return case-insensitive edit distance between two values rendered as strings, counting one adjacent transposition as one typo.

tags: util, fuzzy, typo

packages/util/src/fen/util/fuzzy.fnl:59

fen.util.fuzzy.ranked

(ranked query items text-fn ?opts) -> [item]

Return fuzzy matches sorted by descending score while preserving input order for equal scores; ?opts.min-score drops weak matches.

tags: util, fuzzy, search, rank

packages/util/src/fen/util/fuzzy.fnl:111

fen.util.headless_progress

Module neighborhood graph: DOT · SVG

fen.util.headless_progress module graph

fen.util.headless_progress.make-handler

[?opts]

packages/util/src/fen/util/headless_progress.fnl:46

fen.util.headless_progress.register

[api]

packages/util/src/fen/util/headless_progress.fnl:103

fen.util.http

Module neighborhood graph: DOT · SVG

fen.util.http module graph

fen.util.http.request

(request opts)

Perform an HTTP request.

packages/util/src/fen/util/http/init.fnl:21

fen.util.http.backends.native

Module neighborhood graph: DOT · SVG

fen.util.http.backends.native module graph

fen.util.http.backends.native.request

(request opts) -> {:status :body :headers}|{:error :curl-code?}

Translate kebab-case HTTP options/results and dispatch to the project-owned fen_http libcurl binding.

tags: util, http, native

packages/util/src/fen/util/http/backends/native.fnl:23

fen.util.http.backends.native.capabilities

packages/util/src/fen/util/http/backends/native.fnl:36

fen.util.id

Module neighborhood graph: DOT · SVG

fen.util.id module graph

fen.util.id.random-hex

(random-hex n)

Return n random hexadecimal characters.

packages/util/src/fen/util/id.fnl:16

fen.util.id.uuidv7

(uuidv7)

Return a UUIDv7-shaped, time-sortable identifier string.

packages/util/src/fen/util/id.fnl:35

fen.util.json

Module neighborhood graph: DOT · SVG

fen.util.json module graph

fen.util.json.encode

(encode value) -> string

Encode a Lua value to JSON using the configured cjson instance shared by providers, sessions, and docs tooling.

tags: util, json

packages/util/src/fen/util/json.fnl:22

fen.util.json.encode-deterministic

(encode-deterministic value) -> string

Encode a Lua value to JSON with object keys sorted lexicographically for cache-friendly wire payloads.

tags: util, json, cache

packages/util/src/fen/util/json.fnl:37

fen.util.json.decode

(decode text) -> any

Decode JSON text using cjson with empty-array metadata enabled so provider payload arrays round-trip safely.

tags: util, json

packages/util/src/fen/util/json.fnl:27

fen.util.json.null

cjson.null

Re-export cjson.null for callers that need to preserve explicit JSON null values in Lua tables.

tags: util, json

packages/util/src/fen/util/json.fnl:32

fen.util.json.null?

(null? value)

True iff value is the decoded JSON null sentinel (cjson.null). The

packages/util/src/fen/util/json.fnl:15

fen.util.json.empty-array

cjson.empty_array

Sentinel table that serializes as [] instead of {}, used when provider wire payloads require literal empty arrays.

tags: util, json

packages/util/src/fen/util/json.fnl:81

fen.util.json_schema

Module neighborhood graph: DOT · SVG

fen.util.json_schema module graph

fen.util.json_schema.validate

(validate schema value) -> true|nil, [SchemaError]

Validate a JSON value against Fen's lightweight tool-schema subset.

tags: json, schema, tools

packages/util/src/fen/util/json_schema.fnl:114

fen.util.json_schema.unsupported-keywords

packages/util/src/fen/util/json_schema.fnl:126

fen.util.jsonl

Module neighborhood graph: DOT · SVG

fen.util.jsonl module graph

fen.util.jsonl.append!

(append! holder p rec warn)

Append rec to p, retaining a flushed handle in holder across calls.

packages/util/src/fen/util/jsonl.fnl:12

fen.util.log

Module neighborhood graph: DOT · SVG

fen.util.log module graph

fen.util.log.debug

(debug msg) -> nil

Write a debug-level message when FEN_LOG enables verbose diagnostics; lands in the active log sink when one is open, otherwise stderr.

tags: util, logging

packages/util/src/fen/util/log.fnl:85

fen.util.log.info

(info msg) -> nil

Write an info-level message when the configured log level allows normal diagnostics; lands in the active log sink when one is open, otherwise stderr.

tags: util, logging

packages/util/src/fen/util/log.fnl:90

fen.util.log.warn

(warn msg) -> nil

Write a warning-level message for recoverable problems such as malformed config or extension failures; lands in the active log sink when one is open, otherwise stderr.

tags: util, logging

packages/util/src/fen/util/log.fnl:95

fen.util.log.error

(error msg) -> nil

Write an error-level message for severe runtime failures that should always be visible; lands in the active log sink when one is open, otherwise stderr.

tags: util, logging

packages/util/src/fen/util/log.fnl:100

fen.util.log.timestamp

(timestamp) -> string

Return the current UTC time formatted as RFC3339/ISO8601 for diagnostic file output.

tags: util, logging, time

packages/util/src/fen/util/log.fnl:105

fen.util.log.enabled?

(timestamp) -> string

Return the current UTC time formatted as RFC3339/ISO8601 for diagnostic file output.

tags: util, logging, time

packages/util/src/fen/util/log.fnl:105

fen.util.log.set-level!

(set-level! level) -> boolean

Set the active log threshold at runtime by name (:debug/:info/:warn/:error). Returns true when applied, false for an unknown level. Overrides the FEN_LOG default and persists across /reload; lets an embedded host set the level without env vars.

tags: util, logging

packages/util/src/fen/util/log.fnl:18

fen.util.log.cursor

(timestamp) -> string

Return the current UTC time formatted as RFC3339/ISO8601 for diagnostic file output.

tags: util, logging, time

packages/util/src/fen/util/log.fnl:105

fen.util.log.list-recent

(timestamp) -> string

Return the current UTC time formatted as RFC3339/ISO8601 for diagnostic file output.

tags: util, logging, time

packages/util/src/fen/util/log.fnl:105

fen.util.log_sink

Module neighborhood graph: DOT · SVG

fen.util.log_sink module graph

fen.util.log_sink.handle

packages/util/src/fen/util/log_sink.fnl:6

fen.util.log_sink.level

packages/util/src/fen/util/log_sink.fnl:8

fen.util.log_sink.fallback

packages/util/src/fen/util/log_sink.fnl:10

fen.util.log_sink.set-fallback!

(set-fallback! writer) -> nil

Set the no-file-sink fallback writer, or nil to restore stderr routing. Embedded hosts and tests use this instead of mutating sink state directly.

tags: util, logging, sink, embedding, testing

packages/util/src/fen/util/log_sink.fnl:12

fen.util.log_sink.open!

(open! path) -> boolean,?string

Open path in append mode as the active log sink, closing any prior handle. Returns ok?, err.

tags: util, logging, sink

packages/util/src/fen/util/log_sink.fnl:20

fen.util.log_sink.close!

(close!) -> nil

Close and clear the active log sink handle, returning log routing to stderr.

tags: util, logging, sink

packages/util/src/fen/util/log_sink.fnl:36

fen.util.log_sink.active?

(active?) -> boolean

True when a file sink is currently open and write-line will land in the file.

tags: util, logging, sink

packages/util/src/fen/util/log_sink.fnl:46

fen.util.log_sink.write-fallback

(write-fallback line) -> nil

Emit line when no file sink is active. Uses the configured fallback writer when set, otherwise io.stderr when it exists; on a host with neither the line survives only in the recent ring.

tags: util, logging, sink

packages/util/src/fen/util/log_sink.fnl:73

fen.util.log_sink.write-line

(write-line s) -> boolean,?string

Append s plus a newline to the active sink and flush. Returns true on success; on write failure clears the handle (so callers can fall back to stderr) and returns false plus the error. No-op true when the sink is inactive.

tags: util, logging, sink

packages/util/src/fen/util/log_sink.fnl:54

fen.util.panel

Module neighborhood graph: DOT · SVG

fen.util.panel module graph

fen.util.panel.dim

(dim text) -> Row

Build a dim-styled panel row from text.

tags: panel, ui, rows

packages/util/src/fen/util/panel.fnl:5

fen.util.panel.heading

(heading text) -> Row

Build an assistant-styled heading row from text.

tags: panel, ui, rows

packages/util/src/fen/util/panel.fnl:12

fen.util.panel.box-top

(box-top w title) -> string

Render the titled top border of a panel box at width w.

tags: panel, ui, box

packages/util/src/fen/util/panel.fnl:19

fen.util.panel.box-bottom

(box-bottom w) -> string

Render the bottom border of a panel box at width w.

tags: panel, ui, box

packages/util/src/fen/util/panel.fnl:30

fen.util.panel.box-side

(box-side w text) -> string

Render one bordered content line, clipping and padding to width w.

tags: panel, ui, box

packages/util/src/fen/util/panel.fnl:38

fen.util.panel.bordered-rows

(bordered-rows w content title) -> [Row]

Frame styled content rows in a titled box at width w, one content row per line.

tags: panel, ui, box

packages/util/src/fen/util/panel.fnl:51

fen.util.panel.invalidate-cache!

(invalidate-cache! state) -> nil

Reset the base row-cache fields (cached-rows/at/w) on a panel state table.

tags: panel, ui, cache

packages/util/src/fen/util/panel.fnl:63

fen.util.panel.throttled-rows

(throttled-rows state w title build-content) -> [Row]

Return the panel's framed rows, rebuilding at most once per second or when width changes; build-content is a thunk returning styled content rows.

tags: panel, ui, cache

packages/util/src/fen/util/panel.fnl:73

fen.util.panel_toggle

Module neighborhood graph: DOT · SVG

fen.util.panel_toggle module graph

fen.util.panel_toggle.install!

(install! api opts)

opts requires :name, :command, :panel-spec, and persistent :state. Optional

packages/util/src/fen/util/panel_toggle.fnl:26

fen.util.path

Module neighborhood graph: DOT · SVG

fen.util.path module graph

fen.util.path.getenv

(getenv name) -> string|nil

Read an environment variable through the injectable VFS backend so hosts without OS env vars can supply values (e.g. the reload dev-overlay gate) by swapping the backend.

tags: util, paths, vfs, env

packages/util/src/fen/util/path/init.fnl:9

fen.util.path.home

(home) -> string

Return HOME with a /tmp fallback so path helpers remain usable in stripped-down test or daemon environments.

tags: util, paths, xdg

packages/util/src/fen/util/path/init.fnl:17

fen.util.path.config-home

(config-home) -> string

Return XDG_CONFIG_HOME or the conventional ~/.config directory under the resolved home path.

tags: util, paths, xdg

packages/util/src/fen/util/path/init.fnl:25

fen.util.path.config-dir

(config-dir app) -> string

Return the per-application configuration directory under the XDG config home.

tags: util, paths, xdg

packages/util/src/fen/util/path/init.fnl:36

fen.util.path.state-home

(state-home) -> string

Return XDG_STATE_HOME or the conventional ~/.local/state directory under the resolved home path.

tags: util, paths, xdg

packages/util/src/fen/util/path/init.fnl:44

fen.util.path.state-dir

(state-dir app) -> string

Return the per-application state directory under the XDG state home.

tags: util, paths, xdg

packages/util/src/fen/util/path/init.fnl:55

fen.util.path.data-home

(data-home) -> string

Return XDG_DATA_HOME or the conventional ~/.local/share directory under the resolved home path.

tags: util, paths, xdg

packages/util/src/fen/util/path/init.fnl:63

fen.util.path.data-dir

(data-dir app) -> string

Return the per-application data directory under the XDG data home.

tags: util, paths, xdg

packages/util/src/fen/util/path/init.fnl:74

fen.util.path.ensure-dir!

(ensure-dir! dir) -> nil

Create dir (and missing parents) with POSIX mkdir -p, swallowing failures so callers can attempt their write and surface a clearer error.

tags: util, paths, filesystem

packages/util/src/fen/util/path/init.fnl:82

fen.util.path.shell-quote

(shell-quote s) -> string

Quote a value as one POSIX shell word for helper functions that must invoke system tools safely.

tags: util, paths, shell

packages/util/src/fen/util/path/init.fnl:91

fen.util.path.dirname

(dirname path) -> string

Return the directory portion of a path, using . for bare names and / for root-level paths.

tags: util, paths

packages/util/src/fen/util/path/init.fnl:99

fen.util.path.basename

(basename path) -> string

Return the final path component while tolerating a trailing slash.

tags: util, paths

packages/util/src/fen/util/path/init.fnl:110

fen.util.path.pwd-physical

(pwd-physical dir) -> string|nil

Resolve a directory through the backend's physical pwd probe, returning its physical path or nil if the probe fails.

tags: util, paths, shell

packages/util/src/fen/util/path/init.fnl:118

fen.util.path.cwd

(cwd) -> string

Return the user's current directory spelling from PWD, falling back to a physical pwd probe and then . .

tags: util, paths, cwd

packages/util/src/fen/util/path/init.fnl:126

fen.util.path.realpath

(realpath path) -> string

Resolve the directory portion of a path physically while preserving the original basename.

tags: util, paths

packages/util/src/fen/util/path/init.fnl:134

fen.util.path.file-exists?

(file-exists? path) -> boolean

Return true only for regular files, delegating the stat probe to the injectable backend.

tags: util, paths, filesystem

packages/util/src/fen/util/path/init.fnl:145

fen.util.path.dir-exists?

(dir-exists? path) -> boolean

Return true only for directories, delegating the stat probe to the injectable backend.

tags: util, paths, filesystem

packages/util/src/fen/util/path/init.fnl:153

fen.util.path.list-dir

(list-dir dir ?yield-fn) -> [string]

Return immediate child names of dir (excluding . and ..), or [] for

tags: util, paths, filesystem

packages/util/src/fen/util/path/init.fnl:161

fen.util.path.ancestors-root-to-leaf

(ancestors-root-to-leaf start)

Return start's ancestor chain root-to-leaf, using its physical path so the

packages/util/src/fen/util/path/init.fnl:171

fen.util.path.backends.posix

Module neighborhood graph: DOT · SVG

fen.util.path.backends.posix module graph

fen.util.path.backends.posix.getenv

(getenv name) -> string|nil

Look up an environment variable through os.getenv for the default POSIX backend.

tags: util, paths, vfs, env

packages/util/src/fen/util/path/backends/posix.fnl:33

fen.util.path.backends.posix.stat

(stat path)

Return the path's mode string or nil. Prefer lfs to avoid spawning

packages/util/src/fen/util/path/backends/posix.fnl:41

fen.util.path.backends.posix.list-dir

(list-dir dir ?yield-fn)

Return dir's immediate child names, or [] for an absent/unreadable

packages/util/src/fen/util/path/backends/posix.fnl:51

fen.util.path.backends.posix.pwd-physical

(pwd-physical dir) -> string|nil

Resolve a directory through pwd -P, returning its physical path or nil if the shell probe fails.

tags: util, paths, vfs, shell

packages/util/src/fen/util/path/backends/posix.fnl:77

fen.util.process

Module neighborhood graph: DOT · SVG

fen.util.process module graph

fen.util.process.read-pipe-coop

(read-pipe-coop pipe yield-fn)

Drain a popen pipe to a string, yielding via yield-fn whenever the

packages/util/src/fen/util/process/init.fnl:22

fen.util.process.read-pipe-close

(read-pipe-close pipe ?yield-fn)

Drain a popen pipe and close it in all paths. Cooperative callers can

packages/util/src/fen/util/process/init.fnl:52

fen.util.process.start-captured

(start-captured opts)

Start a child described by :cmd or :argv. job:resume() performs one

packages/util/src/fen/util/process/init.fnl:128

fen.util.process.run-captured

(run-captured opts ?yield-fn)

Run start-captured to completion. Without a yield function this retains the

packages/util/src/fen/util/process/init.fnl:346

fen.util.process.setenv!

(setenv! name value)

Set an environment variable for this process, or unset it when value is nil.

packages/util/src/fen/util/process/init.fnl:68

fen.util.process.backends.posix

Module neighborhood graph: DOT · SVG

fen.util.process.backends.posix module graph

fen.util.process.backends.posix.fileno

packages/util/src/fen/util/process/backends/posix.fnl:7

fen.util.process.backends.posix.set_nonblock

packages/util/src/fen/util/process/backends/posix.fnl:7

fen.util.process.backends.posix.read

packages/util/src/fen/util/process/backends/posix.fnl:7

fen.util.process.backends.posix.close_fd

packages/util/src/fen/util/process/backends/posix.fnl:7

fen.util.process.backends.posix.spawn

packages/util/src/fen/util/process/backends/posix.fnl:7

fen.util.process.backends.posix.spawn_shell

packages/util/src/fen/util/process/backends/posix.fnl:7

fen.util.process.backends.posix.wait_pid

packages/util/src/fen/util/process/backends/posix.fnl:7

fen.util.process.backends.posix.kill_process_group

packages/util/src/fen/util/process/backends/posix.fnl:7

fen.util.process.backends.posix.setenv

packages/util/src/fen/util/process/backends/posix.fnl:7

fen.util.process.backends.posix.EAGAIN

packages/util/src/fen/util/process/backends/posix.fnl:7

fen.util.process.backends.posix.EWOULDBLOCK

packages/util/src/fen/util/process/backends/posix.fnl:7

fen.util.process.backends.posix.SIGTERM

packages/util/src/fen/util/process/backends/posix.fnl:7

fen.util.process.backends.posix.SIGKILL

packages/util/src/fen/util/process/backends/posix.fnl:7

fen.util.random

Module neighborhood graph: DOT · SVG

fen.util.random module graph

fen.util.random.bytes

(bytes n)

Return n cryptographically-random raw bytes as a Lua string. Errors

packages/util/src/fen/util/random/init.fnl:8

fen.util.random.backends.native

Module neighborhood graph: DOT · SVG

fen.util.random.backends.native module graph

fen.util.random.backends.native.bytes

(bytes n) -> string

Return n cryptographically random raw bytes from the fen_random native binding.

tags: util, random, crypto, native

packages/util/src/fen/util/random/backends/native.fnl:7

fen.util.redact

Module neighborhood graph: DOT · SVG

fen.util.redact module graph

fen.util.redact.sensitive-key?

(sensitive-key? key)

Return true when key contains a case-insensitive secret-bearing name.

packages/util/src/fen/util/redact.fnl:17

fen.util.redact.scrub-string

(scrub-string value)

Redact common credential shapes from an otherwise free-form string.

packages/util/src/fen/util/redact.fnl:30

fen.util.redact.sanitize

(sanitize value ?depth)

Return JSON-friendly data while redacting credentials and message bodies.

packages/util/src/fen/util/redact.fnl:42

fen.util.search.bitap

Module neighborhood graph: DOT · SVG

fen.util.search.bitap module graph

fen.util.search.bitap.compile

[pattern ?opts]

packages/util/src/fen/util/search/bitap.fnl:14

fen.util.search.bitap.match

[compiled raw-text ?opts]

packages/util/src/fen/util/search/bitap.fnl:104

fen.util.search.bitap.score

[compiled raw-text]

packages/util/src/fen/util/search/bitap.fnl:112

fen.util.sha256

Module neighborhood graph: DOT · SVG

fen.util.sha256 module graph

fen.util.sha256.digest

(digest bytes)

Compute SHA-256 of bytes (a Lua string) and return the 32 raw bytes.

packages/util/src/fen/util/sha256.fnl:136

fen.util.sha256.hex-digest

(hex-digest bytes)

Return the SHA-256 of bytes as a 64-char lowercase hex string.

packages/util/src/fen/util/sha256.fnl:155

fen.util.sse

Module neighborhood graph: DOT · SVG

fen.util.sse module graph

fen.util.sse.new-parser

(new-parser on-event)

Create an incremental SSE parser.

packages/util/src/fen/util/sse.fnl:21

fen.util.sse.parse

(parse raw)

Parse a complete SSE string into an array of event tables.

packages/util/src/fen/util/sse.fnl:88

fen.util.sse.json-events

(json-events raw)

Parse a complete SSE string and JSON-decode each non-[DONE] data payload.

packages/util/src/fen/util/sse.fnl:96

fen.util.stream_chunks

Module neighborhood graph: DOT · SVG

fen.util.stream_chunks module graph

fen.util.stream_chunks.append!

(append! rec value-key chunks-key delta) -> nil

Append a non-empty string delta to an internal chunk list without concatenating the accumulated value.

tags: util, streaming, chunks

packages/util/src/fen/util/stream_chunks.fnl:8

fen.util.stream_chunks.value

(value rec value-key chunks-key) -> string

Return the current logical string value, concatenating chunks only for this read.

tags: util, streaming, chunks

packages/util/src/fen/util/stream_chunks.fnl:25

fen.util.stream_chunks.materialize!

(materialize! rec value-key chunks-key) -> string

Concatenate any pending chunks into value-key, clear the chunk list, and return the materialized string.

tags: util, streaming, chunks

packages/util/src/fen/util/stream_chunks.fnl:39

fen.util.stream_chunks.set!

(set! rec value-key chunks-key value) -> string

Replace a streamed value with the final string and discard pending chunks.

tags: util, streaming, chunks

packages/util/src/fen/util/stream_chunks.fnl:53

fen.util.subcommands

Module neighborhood graph: DOT · SVG

fen.util.subcommands module graph

fen.util.subcommands.help-lines

(help-lines descriptor)

Render the help table for descriptor as a list of plain strings.

packages/util/src/fen/util/subcommands.fnl:68

fen.util.subcommands.help-text

(help-text descriptor) -> string

Join the generated help lines for a subcommand descriptor into a single newline-delimited string.

tags: util, subcommands, help

packages/util/src/fen/util/subcommands.fnl:98

fen.util.subcommands.build

(build spec)

Turn a declarative subcommand spec into command hooks.

packages/util/src/fen/util/subcommands.fnl:120

fen.util.text

Module neighborhood graph: DOT · SVG

fen.util.text module graph

fen.util.text.DEFAULT-MAX-TOOL-RESULT-BYTES

packages/util/src/fen/util/text.fnl:237

fen.util.text.MAX-SCAN-BYTES

packages/util/src/fen/util/text.fnl:237

fen.util.text.default-tool-result-max-bytes

packages/util/src/fen/util/text.fnl:237

fen.util.text.trim

(trim s) -> string

Strip leading and trailing ASCII whitespace; nil becomes "".

tags: util, text

packages/util/src/fen/util/text.fnl:8

fen.util.text.blank->nil

(blank->nil s) -> string|nil

Return s when it is a non-empty string, else nil.

tags: util, text

packages/util/src/fen/util/text.fnl:16

fen.util.text.first-line

(first-line s) -> string

Return the substring up to the first newline; nil becomes "".

tags: util, text

packages/util/src/fen/util/text.fnl:24

fen.util.text.truncate-line

(truncate-line s n) -> string

Truncate a single-line string to an n-character display budget for ASCII-ish panel labels, using an ellipsis when clipped.

tags: util, text, truncate

packages/util/src/fen/util/text.fnl:34

fen.util.text.utf8-prefix

(utf8-prefix s limit)

Return a prefix of at most limit bytes without splitting a valid UTF-8 sequence.

packages/util/src/fen/util/text.fnl:168

fen.util.text.sanitize

(sanitize s) -> {:text :changed? :unsafe-count :invalid-count :input-bytes}

Escape unsafe control bytes and invalid UTF-8 while preserving valid text and \n/\r/\t.

tags: util, text, tools, sessions, providers

packages/util/src/fen/util/text.fnl:104

fen.util.text.scrub-tool-text

(scrub-tool-text s ?opts) -> {:text :changed? :note :unsafe-count :invalid-count :truncated? :input-bytes :sanitized-bytes :kept-bytes :max-bytes}

Sanitize and cap provider-visible tool output text, appending an explicit marker when changed.

tags: util, text, tools, sessions, providers

packages/util/src/fen/util/text.fnl:187

fen.util.tokens

Module neighborhood graph: DOT · SVG

fen.util.tokens module graph

fen.util.tokens.approx-tokens

(approx-tokens s) -> number

Estimate token count from text length for status displays when provider-reported usage is unavailable.

tags: tokens, status

packages/util/src/fen/util/tokens.fnl:11

fen.util.tokens.safe-json

(safe-json v) -> string

JSON-encode a value for token estimation, falling back to tostring when encoding fails.

tags: tokens, json

packages/util/src/fen/util/tokens.fnl:21

fen.util.tokens.content-tokens

(content-tokens content) -> number

Estimate tokens for canonical message content, including text, thinking blocks, and tool-call names/arguments.

tags: tokens, messages

packages/util/src/fen/util/tokens.fnl:30

fen.util.tokens.message-tokens

(message-tokens msg) -> number

Estimate tokens for one provider-context message including role and tool-result name metadata; persisted failed assistant turns count as zero because they are not replayed.

tags: tokens, messages

packages/util/src/fen/util/tokens.fnl:63

fen.util.tokens.rebuild-ledger

(rebuild-ledger system-prompt messages ?tools ?active-tool-names) -> TokenLedger

Build a token ledger for the current system prompt, active tool schemas, and message table in one pass.

tags: tokens, ledger

packages/util/src/fen/util/tokens.fnl:116

fen.util.tokens.rebuild-agent-ledger!

(rebuild-agent-ledger! agent) -> TokenLedger

Recompute and attach the context-token ledger for an agent.

tags: tokens, ledger, agent

packages/util/src/fen/util/tokens.fnl:139

fen.util.tokens.note-message-appended!

(note-message-appended! agent message index) -> TokenLedger|nil

Increment an agent's token ledger after append-message! grows agent.messages, falling back to lazy rebuild when the ledger is stale.

tags: tokens, ledger, agent

packages/util/src/fen/util/tokens.fnl:152

fen.util.tokens.estimated-context-tokens

(estimated-context-tokens agent) -> number

Return an agent's approximate context tokens, using an incremental ledger when current and rebuilding once after direct message edits.

tags: tokens, ledger, agent

packages/util/src/fen/util/tokens.fnl:182

fen.util.tokens.context-token-info

(context-token-info agent) -> {:tokens number :source keyword :estimated? boolean}

Prefer exact provider-reported context at the latest assistant boundary, otherwise return baseline plus subsequent messages or complete fallback estimate.

tags: tokens, context, usage, status

packages/util/src/fen/util/tokens.fnl:215

fen.util.tokens.usage-totals

(usage-totals messages) -> Usage

Sum provider usage counters across assistant messages for status and session diagnostics.

tags: tokens, usage, messages

packages/util/src/fen/util/tokens.fnl:245

fen.util.tokens.fmt-tokens

(fmt-tokens n) -> string

Format a token count compactly with raw, k, or M suffixes for status output.

tags: tokens, format

packages/util/src/fen/util/tokens.fnl:264

fen.util.tokens.format-token-summary

(format-token-summary usage context ?estimated?) -> string

Build the one-line input/output/cache/context token summary shown by status UIs.

tags: tokens, format, status

packages/util/src/fen/util/tokens.fnl:276

fen.util.turn_result

Module neighborhood graph: DOT · SVG

fen.util.turn_result module graph

fen.util.turn_result.last-assistant

[messages]

packages/util/src/fen/util/turn_result.fnl:5

fen.util.turn_result.failed?

[ok? messages]

packages/util/src/fen/util/turn_result.fnl:13

fen.util.turn_result.sum-usage

[messages]

packages/util/src/fen/util/turn_result.fnl:18

fen.util.usage

Module neighborhood graph: DOT · SVG

fen.util.usage module graph

fen.util.usage.USAGE-FIELDS

USAGE-FIELDS -> [keyword]

Canonical token fields in display order; total-tokens conventionally excludes cache tokens (input+output), matching provider adapters.

tags: usage, tokens

packages/util/src/fen/util/usage.fnl:5

fen.util.usage.canonical-usage

(canonical-usage usage)

Extract canonical token fields from a provider usage table, tolerating both

packages/util/src/fen/util/usage.fnl:36

fen.util.usage.explicit-total?

(explicit-total? usage) -> boolean

True when a usage table carries an explicit provider-reported total (not one derived from input+output).

tags: usage, tokens

packages/util/src/fen/util/usage.fnl:76

fen.util.usage.usage-provenance

(usage-provenance usage ?source)

Per-field provenance for a usage table. Reported fields take ?source (default

packages/util/src/fen/util/usage.fnl:85

fen.util.usage.add-usage!

(add-usage! totals usage) -> nil

Accumulate the numeric canonical fields of a provider usage report into a mutable totals table; does not derive total-tokens.

tags: usage, tokens

packages/util/src/fen/util/usage.fnl:98

fen.util.usage.ensure-total!

(ensure-total! totals) -> totals

Derive total-tokens in place from input+output when absent; returns the totals table.

tags: usage, tokens

packages/util/src/fen/util/usage.fnl:110

fen.util.usage.usage-total

(usage-total usage) -> number|nil

Total tokens for a usage table, preferring a reported total-tokens and otherwise deriving input+output; nil when unusable.

tags: usage, tokens

packages/util/src/fen/util/usage.fnl:121

fen.util.usage.copy-usage-acc

(copy-usage-acc acc) -> acc|nil

Shallow-copy a run usage accumulator (totals/provenance plus scalar turns/source), or nil.

tags: usage, tokens

packages/util/src/fen/util/usage.fnl:132

fen.util.wire

Module neighborhood graph: DOT · SVG

fen.util.wire module graph

fen.util.wire.normalize

(normalize ev ?meta)

Return a bounded canonical display event for EV.

packages/util/src/fen/util/wire.fnl:110

fen.util.wire.line-reader

(line-reader path)

Return stateful reader state for tailing PATH with read-lines!:

packages/util/src/fen/util/wire.fnl:192

fen.util.wire.read-lines!

(read-lines! reader)

Read the next bounded run of complete lines for READER, advancing it.

packages/util/src/fen/util/wire.fnl:198

fen.util.wire.close-reader!

(close-reader! reader)

Close READER's file handle, if open.

packages/util/src/fen/util/wire.fnl:240

fen.util.wire.validate

(validate msg direction)

Validate envelope MSG for DIRECTION (:event child->parent or :control

packages/util/src/fen/util/wire.fnl:397

fen.util.wire.message

(message typ run seq ?payload)

Build an unvalidated envelope: ?payload fields plus :v :seq :type :run.

packages/util/src/fen/util/wire.fnl:437

fen.util.wire.encode

(encode msg direction)

Validate MSG for DIRECTION and encode it as one JSONL line without the

packages/util/src/fen/util/wire.fnl:449

fen.util.wire.decode

(decode line direction)

Decode and validate one JSONL LINE for DIRECTION. Returns the message, or

packages/util/src/fen/util/wire.fnl:466

fen.util.wire.sender

(sender direction run)

Return sender state for DIRECTION on RUN: {:direction :run :seq}.

packages/util/src/fen/util/wire.fnl:482

fen.util.wire.next!

(next! sender typ ?payload)

Stamp, validate, and encode the next message from SENDER. The sender's

packages/util/src/fen/util/wire.fnl:486

fen.util.wire.receiver

(receiver direction)

Return receiver state for lines arriving in DIRECTION: {:direction :seq}.

packages/util/src/fen/util/wire.fnl:495

fen.util.wire.receive!

(receive! receiver line)

Decode LINE for RECEIVER, also rejecting a seq that does not increase

packages/util/src/fen/util/wire.fnl:499

fen.util.wire.rejection-ack

(rejection-ack rej)

Return the control-ack payload answering rejection REJ.

packages/util/src/fen/util/wire.fnl:518

fen.util.wire.event-type?

(event-type? typ)

True when TYP is a child->parent wire event type.

packages/util/src/fen/util/wire.fnl:522

fen.util.wire.control-type?

(control-type? typ)

True when TYP is a parent->child wire control type.

packages/util/src/fen/util/wire.fnl:526

fen.util.wire.VERSION

packages/util/src/fen/util/wire.fnl:530

fen.util.wire.SCHEMAS

packages/util/src/fen/util/wire.fnl:531

fen.util.wire.ENVELOPE-SCHEMA

packages/util/src/fen/util/wire.fnl:532

fen.util.wire.EVENT-TYPES

packages/util/src/fen/util/wire.fnl:533

fen.util.wire.CONTROL-TYPES

packages/util/src/fen/util/wire.fnl:534

fen.util.wire.EVENT-PAYLOAD-BYTES

packages/util/src/fen/util/wire.fnl:535

fen.util.wire.DRAIN-BYTE-BUDGET

packages/util/src/fen/util/wire.fnl:536

fen.util.wire.DRAIN-EVENT-BUDGET

packages/util/src/fen/util/wire.fnl:537

fen.util.wire.MAX-LINE-BYTES

packages/util/src/fen/util/wire.fnl:538

fen.util.wire.MAX-SAFE-INTEGER

packages/util/src/fen/util/wire.fnl:539

fen.util.wire_session

Module neighborhood graph: DOT · SVG

fen.util.wire_session module graph

fen.util.wire_session.decide

(decide state control-type) -> {:status :action :next :reason}

Look up the transition for CONTROL-TYPE in STATE. Unknown states or controls are rejected; the returned entry is a copy.

tags: wire, subagent, protocol, state

packages/util/src/fen/util/wire_session.fnl:131

fen.util.wire_session.advance

(advance state event) -> {:action :next}|nil

Look up the internal-event transition for EVENT in STATE, or nil when that event cannot occur there.

tags: wire, subagent, protocol, state

packages/util/src/fen/util/wire_session.fnl:143

fen.util.wire_session.terminal?

(terminal? state) -> boolean

True for done, cancelled, failed, and timed-out; the terminal state is also the exit status.

tags: wire, subagent, protocol, state

packages/util/src/fen/util/wire_session.fnl:152

fen.util.wire_session.lifecycle-event?

(lifecycle-event? type) -> boolean

True for the lifecycle wire events (ready, turn-started, turn-complete, control-ack, result, exit) that only the child's run loop emits.

tags: wire, subagent, protocol, state

packages/util/src/fen/util/wire_session.fnl:169

fen.util.wire_session.STATES

[state]

Every run state in lifecycle order: starting, ready, running, closing, finalizing, then the terminal done, cancelled, failed, and timed-out.

tags: wire, subagent, protocol, state

packages/util/src/fen/util/wire_session.fnl:13

fen.util.wire_session.CONTROLS

packages/util/src/fen/util/wire_session.fnl:178

fen.util.wire_session.TRANSITIONS

{state {control {:status :action :next :reason}}}

The (state, control) table. :status is the control-ack status (accepted, applied, or rejected), :next the state after the control (absent when rejected), and :action what the child does.

tags: wire, subagent, protocol, state

packages/util/src/fen/util/wire_session.fnl:48

fen.util.wire_session.EVENTS

{state {event {:action :next}}}

The (state, internal event) table for turn ends, the deadline, and fatal errors; a missing entry means the event cannot happen in that state.

tags: wire, subagent, protocol, state

packages/util/src/fen/util/wire_session.fnl:101

Testing (fen.testing.*)

fen.testing

Module neighborhood graph: DOT · SVG

fen.testing module graph

fen.testing.shellquote

(shellquote s) -> string

Quote a string for POSIX shell commands used by test filesystem helpers.

tags: testing, shell, paths

packages/testing/src/fen/testing/init.fnl:5

fen.testing.stub-getenv!

(stub-getenv! resolver)

Monkey-patch os.getenv for a test. resolver receives (name, original-getenv)

packages/testing/src/fen/testing/init.fnl:24

fen.testing.restore-getenv!

(restore-getenv!) -> nil

Restore the original os.getenv captured before tests installed any environment stubs.

tags: testing, env, stubs

packages/testing/src/fen/testing/init.fnl:30

fen.testing.package-loaded-snapshot

(package-loaded-snapshot names) -> table

Capture package.loaded entries so tests that stub modules can restore them reliably, including nil entries.

tags: testing, modules, stubs, package-loaded

packages/testing/src/fen/testing/init.fnl:38

fen.testing.restore-package-loaded!

(restore-package-loaded! snapshot) -> nil

Restore a package.loaded snapshot captured by package-loaded-snapshot.

tags: testing, modules, stubs, package-loaded

packages/testing/src/fen/testing/init.fnl:51

fen.testing.with-package-loaded

(with-package-loaded stubs thunk) -> any

Temporarily replace package.loaded entries while running a test thunk, then restore them even on failure.

tags: testing, modules, stubs, package-loaded

packages/testing/src/fen/testing/init.fnl:61

fen.testing.reload-module

(reload-module name) -> any

Clear package.loaded for one module and require it again so tests can observe module initialization behavior.

tags: testing, reload, modules

packages/testing/src/fen/testing/init.fnl:77

fen.testing.stub-http!

(stub-http! responder)

Replace fen.util.http's backend with a stub for the duration of a test.

packages/testing/src/fen/testing/init.fnl:86

fen.testing.restore-http!

(restore-http!) -> nil

Remove the stubbed HTTP backend and cached frontend so later tests reload the normal transport.

tags: testing, http, stubs

packages/testing/src/fen/testing/init.fnl:95

fen.testing.stub-log-fallback!

(stub-log-fallback! writer) -> nil

Route no-sink log lines to writer for a test. Pair with restore-log-fallback! in after_each.

tags: testing, logging, stubs

packages/testing/src/fen/testing/init.fnl:104

fen.testing.restore-log-fallback!

(restore-log-fallback!) -> nil

Clear the test log fallback writer so later tests use stderr routing again.

tags: testing, logging, stubs

packages/testing/src/fen/testing/init.fnl:113

fen.testing.stub-path-vfs!

(stub-path-vfs! backend)

Replace fen.util.path's backend with a stub for the duration of a test.

packages/testing/src/fen/testing/init.fnl:122

fen.testing.restore-path-vfs!

(restore-path-vfs!) -> nil

Remove the stubbed path backend and cached frontend so later tests reload the default POSIX backend.

tags: testing, path, vfs, stubs

packages/testing/src/fen/testing/init.fnl:130

fen.testing.stub-clock!

(stub-clock! backend)

Replace fen.util.clock's backend with a stub for the duration of a test.

packages/testing/src/fen/testing/init.fnl:140

fen.testing.restore-clock!

(restore-clock!) -> nil

Remove the stubbed clock backend and cached frontend so later tests reload the default native clock.

tags: testing, clock, stubs

packages/testing/src/fen/testing/init.fnl:148

fen.testing.stub-process!

(stub-process! backend)

Replace fen.util.process's backend with a stub for the duration of a test.

packages/testing/src/fen/testing/init.fnl:158

fen.testing.restore-process!

(restore-process!) -> nil

Remove the stubbed process backend and cached frontend so later tests reload the default POSIX subprocess backend.

tags: testing, process, stubs

packages/testing/src/fen/testing/init.fnl:167

fen.testing.stub-random!

(stub-random! backend)

Replace fen.util.random's backend with a stub for the duration of a test.

packages/testing/src/fen/testing/init.fnl:177

fen.testing.restore-random!

(restore-random!) -> nil

Remove the stubbed random backend and cached frontend so later tests reload the default native CSPRNG.

tags: testing, random, stubs

packages/testing/src/fen/testing/init.fnl:184

fen.testing.stub-checksum!

(stub-checksum! backend)

Replace fen.util.checksum's backend with a stub for the duration of a test.

packages/testing/src/fen/testing/init.fnl:194

fen.testing.restore-checksum!

(restore-checksum!) -> nil

Remove the stubbed checksum backend and cached frontend so later tests reload the default io.open/searchpath backend.

tags: testing, checksum, stubs

packages/testing/src/fen/testing/init.fnl:202

fen.testing.stub-storage!

(stub-storage! backend)

Replace fen.core.storage's backend with a stub for the duration of a test.

packages/testing/src/fen/testing/init.fnl:212

fen.testing.restore-storage!

(restore-storage!) -> nil

Remove the stubbed storage backend and cached frontend so later tests reload the default XDG-file backend.

tags: testing, storage, config, stubs

packages/testing/src/fen/testing/init.fnl:221

fen.testing.stub-discover-enumeration!

(stub-discover-enumeration! backend)

Replace fen.core.extensions.loader.discover's enumeration backend with a

packages/testing/src/fen/testing/init.fnl:231

fen.testing.restore-discover-enumeration!

(restore-discover-enumeration!) -> nil

Remove the stubbed discovery backend and cached frontend so later tests reload the default POSIX enumeration.

tags: testing, extensions, loader, discovery, stubs

packages/testing/src/fen/testing/init.fnl:240

fen.testing.make-tmpdir

(make-tmpdir) -> string

Create and register ownership of a temporary directory that rmtree is allowed to remove.

tags: testing, temp, files

packages/testing/src/fen/testing/init.fnl:250

fen.testing.rmtree

(rmtree path)

Remove a temp directory tree created by make-tmpdir.

packages/testing/src/fen/testing/init.fnl:263

fen.testing.write-file

(write-file path content) -> path

Create parent directories as needed and write content to a test fixture file.

tags: testing, files, fixtures

packages/testing/src/fen/testing/init.fnl:276

fen.testing.append-file

(append-file path content) -> path

Append content to a test fixture file and return the path for fluent setup code.

tags: testing, files, fixtures

packages/testing/src/fen/testing/init.fnl:290

fen.testing.read-file

(read-file path) -> string|nil

Read a file if it exists, returning nil instead of failing for optional fixture paths.

tags: testing, files, fixtures

packages/testing/src/fen/testing/init.fnl:301

fen.testing.read-file!

(read-file! path) -> string

Read a required fixture file and fail the test immediately if it cannot be opened.

tags: testing, files, fixtures

packages/testing/src/fen/testing/init.fnl:313

fen.testing.make-tmpfile

(make-tmpfile content) -> string

Create an owned temporary file, write initial content, and return its path for the test.

tags: testing, temp, files

packages/testing/src/fen/testing/init.fnl:324

fen.testing.rm-file

(rm-file path) -> nil

Remove an owned temporary file and refuse paths that were not created by make-tmpfile.

tags: testing, temp, files, safety

packages/testing/src/fen/testing/init.fnl:340

fen.testing.assert-no-leaks!

(assert-no-leaks!) -> nil

Assert that all owned temporary roots and files have been cleaned up by the test suite.

tags: testing, temp, safety

packages/testing/src/fen/testing/init.fnl:354

fen.testing.macros

Module neighborhood graph: DOT · SVG

fen.testing.macros module graph

fen.testing.macros.with-tmpdir

(with-tmpdir [name] body...) -> macro-form

Macro that creates an owned temp directory for a test body and always removes it afterward.

tags: testing, macros, temp

packages/testing/src/fen/testing/macros.fnl:16

fen.testing.macros.with-tmpfile

(with-tmpfile [name content] body...) -> macro-form

Macro that creates an owned temp file with content for a test body and always removes it afterward.

tags: testing, macros, temp

packages/testing/src/fen/testing/macros.fnl:30

fen.testing.pty

Module neighborhood graph: DOT · SVG

fen.testing.pty module graph

fen.testing.pty.spawn

packages/testing/src/fen/testing/pty.fnl:114

fen.testing.pty.read-until

packages/testing/src/fen/testing/pty.fnl:114

fen.testing.pty.drain

packages/testing/src/fen/testing/pty.fnl:114

fen.testing.pty.now

packages/testing/src/fen/testing/pty.fnl:114

fen.testing.pty.artifact-dir

packages/testing/src/fen/testing/pty.fnl:114

fen.testing.pty.ensure-dir

packages/testing/src/fen/testing/pty.fnl:114

fen.testing.pty.write-file

packages/testing/src/fen/testing/pty.fnl:114

fen.testing.pty.append-file

packages/testing/src/fen/testing/pty.fnl:114

fen.testing.pty.encode-json

packages/testing/src/fen/testing/pty.fnl:114

fen.testing.pty.cast-start

packages/testing/src/fen/testing/pty.fnl:114

fen.testing.pty.cast-event

packages/testing/src/fen/testing/pty.fnl:114

fen.testing.tui

Module neighborhood graph: DOT · SVG

fen.testing.tui module graph

fen.testing.tui.install-termbox-stub!

(install-termbox-stub! ?opts)

Install a safe termbox2 test double in package.loaded and return it.

packages/testing/src/fen/testing/tui.fnl:69

fen.testing.tui.screen-lines

(screen-lines stub ?opts)

Return the current captured back-buffer lines for a capture-enabled stub.

packages/testing/src/fen/testing/tui.fnl:185

fen.testing.tui.presented-screen-lines

(presented-screen-lines stub ?opts)

Return the last screen snapshot captured at tb.present, falling back to

packages/testing/src/fen/testing/tui.fnl:196

fen.testing.tui.screen-text

(screen-text stub ?opts) -> string

Return captured screen lines joined with newlines for compact assertion diagnostics.

tags: testing, tui, termbox, screen, capture

packages/testing/src/fen/testing/tui.fnl:205

fen.testing.tui.install-markdown-stub!

(install-markdown-stub!)

Install a tiny markdown renderer for tests that only need wrapping/prefixes.

packages/testing/src/fen/testing/tui.fnl:213

fen.testing.tui.reset-state!

(reset-state! ?opts)

Reset persistent TUI state fields used by logic/rendering tests.

packages/testing/src/fen/testing/tui.fnl:220

fen.testing.tui_latency

Module neighborhood graph: DOT · SVG

fen.testing.tui_latency module graph

fen.testing.tui_latency.stats

[measurements]

packages/testing/src/fen/testing/tui_latency.fnl:14

fen.testing.tui_latency.seed!

[n]

packages/testing/src/fen/testing/tui_latency.fnl:28

fen.testing.tui_latency.run

(run opts)

Replay scheduled keys and bus events. Fake mode advances only waits/stalls;

packages/testing/src/fen/testing/tui_latency.fnl:49

Other (miscellaneous top-level modules)

fen.cli_discovery

Module neighborhood graph: DOT · SVG

fen.cli_discovery module graph

fen.cli_discovery.list

[kind opts]

packages/fen/src/fen/cli_discovery.fnl:108

fen.cli_discovery.show

[kind name opts]

packages/fen/src/fen/cli_discovery.fnl:117

fen.cli_discovery.kinds

[]

packages/fen/src/fen/cli_discovery.fnl:148

fen.cli_discovery.surfaces

[]

packages/fen/src/fen/cli_discovery.fnl:159

fen.cli_discovery.render

[payload json?]

packages/fen/src/fen/cli_discovery.fnl:163

fen.cli_flags

Module neighborhood graph: DOT · SVG

fen.cli_flags module graph

fen.cli_flags.all

[]

packages/fen/src/fen/cli_flags.fnl:444

fen.cli_flags.applies?

[flag context]

packages/fen/src/fen/cli_flags.fnl:446

fen.cli_flags.find-any

[name]

packages/fen/src/fen/cli_flags.fnl:458

fen.cli_flags.find

[name context]

packages/fen/src/fen/cli_flags.fnl:466

fen.cli_flags.invalid-message

[flag context]

packages/fen/src/fen/cli_flags.fnl:470

fen.cli_flags.label

[flag]

packages/fen/src/fen/cli_flags.fnl:474

fen.cli_flags.help-entries

[context]

packages/fen/src/fen/cli_flags.fnl:494

fen.cli_flags.render-options

[context ?opts]

packages/fen/src/fen/cli_flags.fnl:513

fen.cli_flags.nearest-flag

[name ?context]

packages/fen/src/fen/cli_flags.fnl:567

fen.cli_flags.unknown-message

[name ?context]

packages/fen/src/fen/cli_flags.fnl:571

fen.cli_help

Module neighborhood graph: DOT · SVG

fen.cli_help module graph

fen.cli_help.for-subcommand

[name]

packages/fen/src/fen/cli_help.fnl:316

fen.cli_help.top-level

(top-level)

Short default top-level help.

packages/fen/src/fen/cli_help.fnl:319

fen.cli_help.top-level-all

(top-level-all)

Exhaustive top-level help, including launcher internals and env-var minutiae.

packages/fen/src/fen/cli_help.fnl:323

fen.cli_help.help?

[arg]

packages/fen/src/fen/cli_help.fnl:327

fen.cli_help.help-all?

[arg]

packages/fen/src/fen/cli_help.fnl:330

fen.cli_help.write-top-level-help!

(write-top-level-help! ?all?)

Write short (default) or exhaustive (?all? true) top-level help to stdout.

packages/fen/src/fen/cli_help.fnl:333

fen.cli_help.write-subcommand-help!

[name]

packages/fen/src/fen/cli_help.fnl:338

fen.cli_parse

Module neighborhood graph: DOT · SVG

fen.cli_parse module graph

fen.cli_parse.option-token?

[token]

packages/fen/src/fen/cli_parse.fnl:5

fen.cli_parse.valid-choice?

(valid-choice? flag value)

True when FLAG declares no :parse :choices list or VALUE is one of them.

packages/fen/src/fen/cli_parse.fnl:8

fen.cli_parse.consume!

(consume! opts flag argv i)

Apply FLAG at argv index I. Returns next-index,error-message.

packages/fen/src/fen/cli_parse.fnl:50

fen.interactive

Module neighborhood graph: DOT · SVG

fen.interactive module graph

fen.interactive.make-agent-from-opts

(make-agent-from-opts resolve-provider-config opts on-event extra)

Resolve the provider config (re-reads models.json each call so /reload

packages/fen/src/fen/interactive.fnl:61

fen.interactive.run!

(run! opts resolve-provider-config) -> exit-code|nil

Build the agent, session, and run-state, drive the active presenter's turn loop, and return its exit code (nil for presenters that exit through their own lifecycle).

tags: runtime, presenter, agent, lifecycle

packages/fen/src/fen/interactive.fnl:143

fen.interactive.submit-agent-turn!

(submit-agent-turn! state line ?opts ?emit) -> table

Submit a turn through the current interactive turn helper.

tags: runtime, presenter, agent, turn

packages/fen/src/fen/interactive.fnl:310

fen.interactive.pin-tools!

(pin-tools! active-tool-names pinned agent-tools) -> nil

Seed the active-tool-names set with configured pinned tools that resolve to a registered tool, so their schemas appear without a preliminary tool_search.

tags: interactive, tools, pinned, exposure

packages/fen/src/fen/interactive.fnl:317

fen.prompt_source

Module neighborhood graph: DOT · SVG

fen.prompt_source module graph

fen.prompt_source.count

[opts inline]

packages/fen/src/fen/prompt_source.fnl:4

fen.prompt_source.read

[opts inline]

packages/fen/src/fen/prompt_source.fnl:8

fen.provider_help

Module neighborhood graph: DOT · SVG

fen.provider_help module graph

fen.provider_help.render-index

[]

packages/fen/src/fen/provider_help.fnl:138

fen.provider_help.render-provider

[name]

packages/fen/src/fen/provider_help.fnl:168

fen.provider_help.known-provider?

[name]

packages/fen/src/fen/provider_help.fnl:175

fen.provider_help.dispatch

(dispatch argv)

Render the fen providers [name] subcommand. Returns (output exit-code).

packages/fen/src/fen/provider_help.fnl:189

fen.provider_help.missing-provider-message

[provider-name key-var ?source]

packages/fen/src/fen/provider_help.fnl:204

fen.provider_help.unknown-provider-message

[provider-name]

packages/fen/src/fen/provider_help.fnl:221

fen.reload_request

Module neighborhood graph: DOT · SVG

fen.reload_request module graph

fen.reload_request.enqueue!

(enqueue! state request) -> ok?, request|error

Validate and append an agent-requested reload or explicitly scoped recovery request to one interactive run state's deferred queue.

tags: reload, recovery, runtime, agent

packages/fen/src/fen/reload_request.fnl:11

fen.reload_request.drain!

(drain! state execute!)

The presenter calls this after finishing a turn. state.busy? covers

packages/fen/src/fen/reload_request.fnl:43

fen.reload_request.command-line

(command-line request) -> string

Convert one validated deferred request into the ordinary reload command line used by the interactive command dispatcher.

tags: reload, recovery, commands

packages/fen/src/fen/reload_request.fnl:62

fen.run_state

Module neighborhood graph: DOT · SVG

fen.run_state module graph

fen.run_state.make

(make cfg) -> RunState

Build the interactive runtime state table and install it in cfg.state-box for reload-safe closures.

tags: runtime, state, presenter, sessions

packages/fen/src/fen/run_state.fnl:15

fen.runtime

Module neighborhood graph: DOT · SVG

fen.runtime module graph

fen.runtime.binary-path

(binary-path) -> string|nil

Best-effort absolute path to fen's own executable. Prefers argv[0]

tags: runtime, process, self

packages/fen/src/fen/runtime.fnl:36

fen.runtime_recovery

Module neighborhood graph: DOT · SVG

fen.runtime_recovery module graph

fen.runtime_recovery.supported-scopes

(supported-scopes) -> [keyword]

Return the small explicit set of runtime recovery scopes accepted by deferred reload requests.

tags: reload, recovery, runtime

packages/fen/src/fen/runtime_recovery.fnl:30

fen.runtime_recovery.recover!

(recover! scope) -> RecoveryResult|nil, error

Reset only the declared registry buckets for scope and preserve session, UI table identity, logs, diagnostics, overlays, and other persistent extension state.

tags: reload, recovery, runtime, extensions

packages/fen/src/fen/runtime_recovery.fnl:37

fen.script_runner

Module neighborhood graph: DOT · SVG

fen.script_runner module graph

fen.script_runner.usage

(usage) -> string

Return command-line usage text for fen run.

tags: cli, scripts

packages/fen/src/fen/script_runner.fnl:40

fen.script_runner.eval-usage

(eval-usage) -> string

Return command-line usage text for fen eval.

tags: cli, scripts, eval

packages/fen/src/fen/script_runner.fnl:47

fen.script_runner.infer-language

(infer-language script ?override) -> :lua|:fennel

Choose the runner language, using an explicit override before script extension inference.

tags: cli, scripts

packages/fen/src/fen/script_runner.fnl:54

fen.script_runner.infer-eval-language

(infer-eval-language code ?override) -> :lua|:fennel

Choose the eval language, using an explicit override before inferring Fennel from a leading ( or ;.

tags: cli, scripts, eval

packages/fen/src/fen/script_runner.fnl:62

fen.script_runner.build-arg-table

(build-arg-table argv script-index)

Map fen's argv into Lua's script convention: arg[0] is the script,

packages/fen/src/fen/script_runner.fnl:70

fen.script_runner.build-eval-arg-table

(build-eval-arg-table argv code-index)

Map fen's argv for eval mode. arg[0] is a synthetic chunk name,

packages/fen/src/fen/script_runner.fnl:81

fen.script_runner.parse

(parse argv) -> table|nil, err|nil

Parse fen run arguments without invoking the general agent option parser.

tags: cli, scripts

packages/fen/src/fen/script_runner.fnl:96

fen.script_runner.parse-eval

(parse-eval argv) -> table|nil, err|nil

Parse fen eval arguments without invoking the general agent option parser.

tags: cli, scripts, eval

packages/fen/src/fen/script_runner.fnl:132

fen.script_runner.run!

(run! argv) -> integer

Run the script selected by fen run and return the process exit code.

tags: cli, scripts

packages/fen/src/fen/script_runner.fnl:231

fen.script_runner.eval!

(eval! argv) -> integer

Evaluate the code selected by fen eval and return the process exit code.

tags: cli, scripts, eval

packages/fen/src/fen/script_runner.fnl:262

fen.session_cli

Module neighborhood graph: DOT · SVG

fen.session_cli module graph

fen.session_cli.run!

[argv hooks]

packages/fen/src/fen/session_cli.fnl:161

fen.session_control

Module neighborhood graph: DOT · SVG

fen.session_control module graph

fen.session_control.new

[opts]

packages/fen/src/fen/session_control.fnl:57

fen.session_control.list

[opts]

packages/fen/src/fen/session_control.fnl:69

fen.session_control.doctor

[session-path opts]

packages/fen/src/fen/session_control.fnl:80

fen.session_control.show

[session-id opts]

packages/fen/src/fen/session_control.fnl:90

fen.session_control.send

[session-id prompt opts resolve-provider-config]

packages/fen/src/fen/session_control.fnl:246

fen.session_lifecycle

Module neighborhood graph: DOT · SVG

fen.session_lifecycle module graph

fen.session_lifecycle.cwd

(cwd)

Return the authoritative physical cwd used for session grouping.

packages/fen/src/fen/session_lifecycle.fnl:15

fen.session_lifecycle.resolve-backend

(resolve-backend opts) -> SessionBackend

Resolve and mark the active session backend, while allowing --no-session to disable writes without disabling replay/discovery.

tags: sessions, lifecycle, cli

packages/fen/src/fen/session_lifecycle.fnl:20

fen.session_lifecycle.backend-info

(backend-info backend session) -> SessionInfo|nil

Return backend-specific session info when available, else a generic info record.

tags: sessions, lifecycle, introspection

packages/fen/src/fen/session_lifecycle.fnl:36

fen.session_lifecycle.close!

(close! backend session) -> nil

Close the active session handle and clear cached session info.

tags: sessions, lifecycle, persistence

packages/fen/src/fen/session_lifecycle.fnl:50

fen.session_lifecycle.open

(open opts backend) -> Session|nil

Open a new transcript handle unless session writes are disabled.

tags: sessions, lifecycle, persistence

packages/fen/src/fen/session_lifecycle.fnl:60

fen.session_lifecycle.start!

(start! opts agent backend) -> session, replayed-count

Open or resume the active transcript and replay --continue messages into the agent.

tags: sessions, lifecycle, persistence, replay

packages/fen/src/fen/session_lifecycle.fnl:71

fen.session_lifecycle.make-flush

(make-flush backend agent session initial-last-saved)

Returns a closure that appends any messages added since the last call.

packages/fen/src/fen/session_lifecycle.fnl:100

fen.session_lifecycle.install!

(install! state)

Bridge :message-appended into the existing session flush closure.

packages/fen/src/fen/session_lifecycle.fnl:112

fen.session_lifecycle.uninstall!

(uninstall!) -> nil

Remove the process-level session lifecycle event bridge.

tags: sessions, lifecycle, events

packages/fen/src/fen/session_lifecycle.fnl:124

fen.tool_policy

Module neighborhood graph: DOT · SVG

fen.tool_policy module graph

fen.tool_policy.conflict-error

(conflict-error opts)

Return a CLI conflict message, if mutually exclusive tool flags coexist.

packages/fen/src/fen/tool_policy.fnl:14

fen.tool_policy.narrow

(narrow candidates opts)

Return the subset of CANDIDATE tool names permitted under a parent's

packages/fen/src/fen/tool_policy.fnl:81

fen.tool_policy.apply

(apply opts tools)

Return the policy-filtered tool list, or nil plus a configuration error.

packages/fen/src/fen/tool_policy.fnl:111

fen.tool_policy.restriction-info

(restriction-info opts tools)

Return filtered-tool metadata for status and executor diagnostics.

packages/fen/src/fen/tool_policy.fnl:116

fen.turn_lifecycle

Module neighborhood graph: DOT · SVG

fen.turn_lifecycle module graph

fen.turn_lifecycle.complete-event

(complete-event state ok? result-or-error) -> table

Build an :agent-turn-complete event for a finished agent turn.

tags: agent, lifecycle, events

packages/fen/src/fen/turn_lifecycle.fnl:22

fen.turn_lifecycle.emit-complete!

(emit-complete! state ok? result-or-error) -> table

Emit and return the :agent-turn-complete lifecycle event for a finished agent turn.

tags: agent, lifecycle, events

packages/fen/src/fen/turn_lifecycle.fnl:45

fen.turn_submit

Module neighborhood graph: DOT · SVG

fen.turn_submit module graph

fen.turn_submit.submit!

(submit! state line ?opts agent-step emit)

Submit text as a normal user turn, or queue/reject while busy.

packages/fen/src/fen/turn_submit.fnl:30

fen.update

Module neighborhood graph: DOT · SVG

fen.update module graph

fen.update.run!

(run! argv) -> exit-code

Replace the running release binary with the latest GitHub release; refuses source/dev builds.

tags: update, self-update, distribution

packages/fen/src/fen/update.fnl:252

fen.update.arch-

packages/fen/src/fen/update.fnl:275

fen.update.expected-hash

packages/fen/src/fen/update.fnl:276

fen.version

Module neighborhood graph: DOT · SVG

fen.version module graph

fen.version.info

(info) -> VersionInfo

Return source-checkout version metadata; Nix builds replace this module with a stamped table.

tags: version, build, metadata

packages/fen/src/fen/version.fnl:45

fen.version.version

(version) -> string

Return the short source version string used by CLI/status displays.

tags: version, build, metadata

packages/fen/src/fen/version.fnl:53

fen.version.format

(format ?info) -> string

Format version metadata as the single-line fen --version display.

tags: version, build, metadata

packages/fen/src/fen/version.fnl:61