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:47

fen.core.agent.step

(step agent user-msg ?cancel-fn) -> string

Run one user turn. Appends a UserMessage, then iterates provider-call -> tool-execution until a non-tool stop reason or the safety cap. Cooperative yields when called inside a coroutine; ?cancel-fn polled at every yield.

tags: agent, loop, step

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

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:15

fen.core.agent.complete-messages

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

Run one provider completion using an agent's provider configuration, explicit canonical messages, and no tools.

tags: agent, llm, extensions

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

fen.core.diagnostics

Module neighborhood graph: DOT · SVG

fen.core.diagnostics module graph

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

(set-runtime-info! info) -> table|nil

Store sanitized runtime/build metadata for durable error/provider diagnostics.

tags: diagnostics, version, runtime

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

fen.core.diagnostics.runtime-info

(runtime-info) -> table|nil

Return runtime/build metadata previously injected by fen.main, if available.

tags: diagnostics, version, runtime

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

fen.core.docs.contracts

Module neighborhood graph: DOT · SVG

fen.core.docs.contracts module graph

fen.core.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

packages/core/src/fen/core/docs/contracts.fnl:15

fen.core.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

packages/core/src/fen/core/docs/contracts.fnl:158

fen.core.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

packages/core/src/fen/core/docs/contracts.fnl:295

fen.core.docs.contracts.interfaces

table

Interface contract table for provider, auth backend, session backend, and presenter records.

tags: docs, contracts, interfaces, providers, sessions

packages/core/src/fen/core/docs/contracts.fnl:614

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:45

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:96

fen.core.extensions.events.emit

(emit ev) -> nil

Record error events, dispatch ev to handlers for ev.type, and then dispatch to wildcard :* subscribers.

tags: extensions, events, bus

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

fen.core.extensions.events.on

(on event-name handler ?owner) -> unsubscribe-fn

Subscribe a handler to one event name with optional owner tagging and return a closure that removes that exact handler.

tags: extensions, events, subscribe

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

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:153

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:162

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) -> any

Load a sibling .fnl/.lua file for a path-shaped extension's api.load helper without requiring a global namespace.

tags: extensions, loader, files

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

fen.core.extensions.loader.load!

(load! opts ?mode) -> ExtensionLoadSummary

Discover, gate, and load admissible extensions, failing fast only after collecting first-party load failures.

tags: extensions, loader, lifecycle

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:286

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:303

fen.core.extensions.loader.discover

Module neighborhood graph: DOT · SVG

fen.core.extensions.loader.discover module graph

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

(first-party-roots) -> [string]

Return trusted flat first-party overlay roots supplied by the single-file launcher.

tags: extensions, loader, discovery

packages/core/src/fen/core/extensions/loader/discover.fnl:116

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

(project-roots) -> [string]

Return .fen/extensions roots from cwd upward to the worktree boundary, nearest first for project-local override priority.

tags: extensions, loader, discovery

packages/core/src/fen/core/extensions/loader/discover.fnl:131

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

(user-roots) -> [string]

Return user extension roots from FEN_EXTENSIONS_PATH plus the XDG fen/extensions directory.

tags: extensions, loader, discovery

packages/core/src/fen/core/extensions/loader/discover.fnl:156

fen.core.extensions.loader.discover.discover

(discover explicit-paths) -> [ExtensionSpec]

Build the deduped extension spec list in load-priority order: explicit, first-party flat overlays, project, user, then embedded first-party.

tags: extensions, loader, discovery

packages/core/src/fen/core/extensions/loader/discover.fnl:296

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:25

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

[file-path]

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

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

[dir]

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

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

[dir]

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

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

[file-path]

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

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

[manifest]

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

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

[manifest]

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

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

[manifest]

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

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

[manifest]

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

fen.core.extensions.loader.manifest.first-party?

[manifest]

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

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

[manifest fallback]

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

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

[manifest]

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

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

[spec]

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

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

[entry]

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

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

[manifest]

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

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

[manifest]

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

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

[manifest]

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

fen.core.extensions.loader.manifest.missing-deps

[manifest]

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

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:42

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

(change-summary mods) -> ReloadChangeSummary

Probe module fingerprints, update the reload cache, and return checked/changed counts plus changed module names.

tags: extensions, loader, reload, fingerprint

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

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

(clear-reload-modules! manifest fallback) -> ReloadChangeSummary

Re-require manifest reload modules in place, respecting reload-exclude, and return one summary for user-facing reload diagnostics.

tags: extensions, loader, reload

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

fen.core.extensions.register

Module neighborhood graph: DOT · SVG

fen.core.extensions.register module graph

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:38

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

(unregister-by-owner owner) -> nil

Sweep every registry kind and event-handler bucket, removing contributions tagged with owner during reload or teardown.

tags: extensions, register, reload

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

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:107

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:130

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:17

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:27

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:35

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:21

fen.core.extensions.register.command.dispatch

(dispatch line caller-state) -> nil

Parse a slash command line, enforce idle-only guards, pcall-isolate the handler, and emit user-facing errors.

tags: extensions, commands, events

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

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.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:6

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:17

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:6

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:28

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

(run-before-tool tool-name args ctx) -> {:block? boolean :reason string|nil}

Run registered before-tool hooks in order and return the first veto decision, or an explicit non-blocking decision.

tags: extensions, hooks, tools

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

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:17

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

[owner]

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

fen.core.extensions.register.introspect.list

[]

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

fen.core.extensions.register.introspect.collect

[?owner ?ctx]

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

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:47

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:64

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!) -> nil

Recompute the shared UI slot from the first active presenter that supplies one after unregister or reload.

tags: extensions, presenter, ui, reload

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

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

(active-presenter) -> Presenter|nil

Return the first registered presenter marked active, or nil when no presenter has claimed the run.

tags: extensions, presenter, ui

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

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:35

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:52

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:75

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:83

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:91

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:124

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:135

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:16

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:35

fen.core.extensions.register.prompt.render

(render ?ctx) -> string|nil

Render registered prompt fragments in final order, omitting nil/empty fragments and isolating fragment function errors.

tags: extensions, prompt, render

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

fen.core.extensions.register.prompt.list

(list) -> [PromptFragmentInfo]

Return prompt-fragment metadata in final render order without exposing raw fragment text content.

tags: extensions, prompt, introspection

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

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:22

fen.core.extensions.register.provider.find

(find name) -> Provider|nil

Find a provider by its unique registry name; provider :api is protocol metadata, not the deterministic dispatch key.

tags: extensions, providers, lookup

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

fen.core.extensions.register.provider.list-by-api

(list-by-api api) -> [Provider]

Return all providers whose protocol/family metadata matches api for introspection and delegation.

tags: extensions, providers, lookup

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

fen.core.extensions.register.provider.find-by-api

(find-by-api api) -> Provider|nil

Return the first provider matching an api family for legacy/introspection callers that cannot require unique provider names.

tags: extensions, providers, lookup

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

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:68

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:13

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:28

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:41

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:49

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:59

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

(set-info! info) -> info

Store the active session info record for later runtime inspection by commands, tools, and docs.

tags: extensions, session, introspection

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

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:77

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:84

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:12

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:30

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:47

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:6

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:17

fen.core.extensions.register.tool.merged

(merged base) -> [AgentTool]

Return base tools followed by extension-contributed tools in registry order for agent-step tool exposure.

tags: extensions, tools, agent

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

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:38

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:12

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:23

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:32

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

(prepend-tree! ?tree) -> true|nil

Prepend an existing fen rocks tree to package.path and package.cpath so extension dependencies can be required.

tags: extensions, rocks, paths

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

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:67

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:77

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:85

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

(parse-missing-module err) -> string|nil

Extract the missing module name from Lua's standard require error so loader failures can suggest installation actions.

tags: extensions, rocks, diagnostics

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

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:110

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:119

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:136

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:151

fen.core.extensions.rocks.build!

(build! dir) -> exit-code

Build an extension rockspec into the fen rocks tree using bundled LuaRocks when available, returning process-style exit codes.

tags: extensions, rocks, build

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

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.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.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:57

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:63

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:69

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:75

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:81

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:87

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:93

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:99

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:105

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:111

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:117

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:123

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:129

fen.core.extensions.test_api

Module neighborhood graph: DOT · SVG

fen.core.extensions.test_api module graph

fen.core.extensions.test_api.reset!

(reset!) -> nil

Wipe all extension registries in place for tests without requiring the broad runtime facade.

tags: extensions, testing, reset

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

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

[?owner ?manifest ?opts]

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

fen.core.extensions.test_api.make

(make ?owner ?manifest) -> ExtensionApi

Build a captured extension API for tests, resetting global extension state and recording registrations, prompts, and events.

tags: extensions, testing, api

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

fen.core.extensions.util

Module neighborhood graph: DOT · SVG

fen.core.extensions.util module graph

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:3

fen.core.extensions.util.freeze

(freeze t) -> table

Return a recursive read-only proxy around a copied table for safe extension-facing introspection lists.

tags: extensions, registry, introspection

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

fen.core.extensions.util.remove-where

(remove-where t pred) -> nil

Mutate an array-like table in place, removing entries whose predicate returns true while iterating from the end.

tags: extensions, registry, util

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

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:52

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

(add-tagged! list spec owner) -> record, unregister-fn

Append a deep-copied owner-tagged contribution to an array registry and return the record plus identity-based unregister closure.

tags: extensions, registry, owner

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

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

(set-tagged! dict name spec owner) -> record, unregister-fn

Install a deep-copied owner-tagged singleton registry entry and return a stale-safe unregister closure.

tags: extensions, registry, owner

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

fen.core.llm

Module neighborhood graph: DOT · SVG

fen.core.llm module graph

fen.core.llm.register

(register provider) -> provider

Compatibility helper for in-process callers/tests. Prefer (extensions.register :provider provider owner) in extensions.

tags: provider, llm

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

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:22

fen.core.llm.complete

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

Dispatch a completion to the named provider. Returns a canonical AssistantMessage. The provider chooses native streaming, cooperative-yield streaming, or blocking based on which callbacks are present.

tags: provider, llm

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

fen.core.llm.emit-block-events

(emit-block-events asst emit) -> nil

Synthesize streaming block events from a complete AssistantMessage. Compatibility bridge for providers that do not implement :complete-stream natively.

tags: provider, llm, streaming

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

fen.core.llm.event_stream

Module neighborhood graph: DOT · SVG

fen.core.llm.event_stream module graph

fen.core.llm.event_stream.new-stream

(new-stream on-event) -> AssistantEventStream

Create a synchronous assistant-event sink that records events, forwards them to an observer, and captures the final result.

tags: llm, events, stream

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

fen.core.llm.event_stream.terminal-event?

(terminal-event? ev) -> boolean

Return true when an assistant stream event terminates the stream with either :done or :error.

tags: llm, events, stream

packages/core/src/fen/core/llm/event_stream.fnl:9

fen.core.llm.event_stream.event-result

(event-result ev) -> AssistantMessage|string|nil

Extract the final AssistantMessage or error payload carried by a terminal assistant stream event.

tags: llm, events, stream

packages/core/src/fen/core/llm/event_stream.fnl:18

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:16

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:24

fen.core.llm.models.load

(load) -> table

Load and cache the raw providers map from models.json, returning an empty table for missing or malformed config.

tags: models, config, providers

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

fen.core.llm.models.get-provider

(get-provider name) -> ModelsProvider|nil

Return the normalized models.json provider record for name, including api, base-url, api-key, compat, and models.

tags: models, config, providers

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

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

(register-providers!) -> number

Register every valid models.json provider into the extension registry under owner :models_json and return the count installed.

tags: models, providers, extensions

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

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

(resolve-api-key value) -> string|nil

Resolve a models.json apiKey field by treating nil/empty values as absent and all-caps values as environment variable names.

tags: models, config, auth

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

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

(looks-like-env-var? s) -> boolean

Return true when an apiKey string looks like an environment variable name rather than a literal credential.

tags: models, config, auth

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

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

(first-model-id provider) -> string|nil

Pick the first declared model id from a normalized provider record for default-model selection.

tags: models, providers, defaults

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

fen.core.llm.models.available-models

(available-models opts) -> [ModelRef]

Return selectable model refs from registered providers, filtering credential-gated built-ins until auth is configured.

tags: models, providers, resolve

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

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:208

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

(resolve-model-exact query models) -> {:status :model :candidates}

Resolve an exact model query by canonical provider/id first and then by unique bare model id.

tags: models, resolve

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

fen.core.llm.models.resolve-model

(resolve-model query models) -> {:status :model :candidates}

Resolve a model query by exact provider/id or bare id first, then by unique substring over provider/id or id.

tags: models, resolve

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

fen.core.llm.retry

Module neighborhood graph: DOT · SVG

fen.core.llm.retry module graph

fen.core.llm.retry.DEFAULT-MAX-ATTEMPTS

number

Default maximum number of provider HTTP attempts, including the initial try and transient retries.

tags: llm, retry, defaults

packages/core/src/fen/core/llm/retry.fnl:9

fen.core.llm.retry.DEFAULT-BASE-DELAY-MS

number

Default base delay in milliseconds used as the first exponential-backoff jitter cap.

tags: llm, retry, defaults

packages/core/src/fen/core/llm/retry.fnl:16

fen.core.llm.retry.DEFAULT-MAX-DELAY-MS

number

Default maximum jitter cap in milliseconds for provider retry backoff delays.

tags: llm, retry, defaults

packages/core/src/fen/core/llm/retry.fnl:23

fen.core.llm.retry.transient?

(transient? status err-message ?curl-code) -> boolean

Return true for provider HTTP status or curl code that is safe to retry below the agent message layer.

tags: llm, http, retry

packages/core/src/fen/core/llm/retry.fnl:53

fen.core.llm.retry.mark-incomplete-stream

packages/core/src/fen/core/llm/retry.fnl:237

fen.core.llm.retry.options

(options provider ?opts ?on-event) -> table

Build with-retry options from provider request opts, honoring AGENT_FENNEL_RETRY=0 and emitting tagged :provider-retry events.

tags: llm, http, retry

packages/core/src/fen/core/llm/retry.fnl:175

fen.core.llm.retry.parse-retry-after

(parse-retry-after headers) -> number|nil

Parse Retry-After or retry-after-ms response headers into a millisecond delay for provider backoff.

tags: llm, http, retry

packages/core/src/fen/core/llm/retry.fnl:97

fen.core.llm.retry.backoff-delay

(backoff-delay attempt base-ms max-ms) -> number

Compute a full-jitter exponential backoff delay in milliseconds for the given failed attempt number.

tags: llm, http, retry

packages/core/src/fen/core/llm/retry.fnl:116

fen.core.llm.retry.with-retry

(with-retry opts make-request ?yield!) -> response

Run a provider request with bounded retry, Retry-After support, jittered backoff, and cooperative cancellation yields.

tags: llm, http, retry

packages/core/src/fen/core/llm/retry.fnl:202

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:11

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:20

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:15

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:23

fen.core.settings.load

(load ?p) -> Settings

Load normalized user settings from settings.json, returning an empty record for missing or malformed files.

tags: settings, config

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

fen.core.settings.save!

(save! settings ?p) -> Settings

Atomically write normalized default-provider/default-model settings while preserving unknown top-level keys already on disk.

tags: settings, config, write

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

fen.core.settings.set-defaults!

(set-defaults! provider model ?p) -> Settings

Persist the default provider and model selected by commands, then return the normalized settings record.

tags: settings, config, models

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

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

(set-thinking-default! level ?p) -> Settings

Persist the default provider-neutral thinking level and return the normalized settings record.

tags: settings, config, thinking

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

fen.core.thinking

Module neighborhood graph: DOT · SVG

fen.core.thinking module graph

fen.core.thinking.LEVELS

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

fen.core.thinking.normalize-level

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

fen.core.thinking.valid-level?

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

fen.core.thinking.levels

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

fen.core.thinking.level-list

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

fen.core.thinking.level-

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

fen.core.tools

Module neighborhood graph: DOT · SVG

fen.core.tools module graph

fen.core.tools.descriptors

(descriptors reg) -> [Tool]

Strip executable AgentTool records down to canonical Tool descriptors passed to providers.

tags: tools, providers

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

fen.core.tools.execute-call

(execute-call reg tool-call ctx ?yield-fn) -> {:message :result :duration-seconds :tool-call}

Execute one canonical ToolCall against the registered tools and wrap the result as a ToolResultMessage plus diagnostics.

tags: tools, agent

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

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:101

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:108

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:116

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:128

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:137

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:148

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:166

fen.core.types.assistant-error

(assistant-error api provider model error-message) -> AssistantMessage

Build an AssistantMessage representing a transport/HTTP failure. Sets stop-reason :error and inserts a synthetic "[error] ..." text block.

tags: types, message, error

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

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:195

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:202

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:222

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:229

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:12

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:531

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:146

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:503

fen.extensions.agent_state.tool.sanitized-state

(sanitized-state agent api ?ctx) -> table

Build the redacted agent-state snapshot exposed to the agent_state tool without leaking raw mutable agent internals.

tags: tool, agent-state, introspection

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

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:5

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:11

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:17

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:23

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:29

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:35

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:41

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

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?) -> string, truncated?

Keep the beginning of tool output within max-lines/max-bytes, yielding during scans and full-output spills when cooperative.

tags: tools, output, truncate

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

fen.extensions.builtin_tools.truncate.truncate-tail

(truncate-tail s opts? yield-fn?) -> string, truncated?

Keep the end of tool output within max-lines/max-bytes, yielding during scans and full-output spills when cooperative.

tags: tools, output, truncate

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.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:13

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:21

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:29

fen.extensions.builtin_tools.util.int-arg

(int-arg v default) -> number

Normalize numeric tool arguments by converting to an integer or returning the provided default.

tags: tools, args, util

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

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:47

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:56

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:5

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:11

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:17

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:23

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:29

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:35

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:41

fen.extensions.compact

Module neighborhood graph: DOT · SVG

fen.extensions.compact module graph

fen.extensions.compact.register

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

fen.extensions.compact.register!

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

fen.extensions.compact._test

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

fen.extensions.default_prompt

Module neighborhood graph: DOT · SVG

fen.extensions.default_prompt module graph

fen.extensions.default_prompt.tool-list-section

(tool-list-section tools) -> string|nil

Render the available-tools prompt section from registered tool snippets, omitting the section when none are present.

tags: prompt, default, tools

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

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:44

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:68

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:139

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:146

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:146

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:154

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:73

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:87

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:94

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:101

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:108

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:115

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:477

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, index, exact id, or substring query.

tags: commands, model, register

extensions/behaviors/kernel/essentials/commands/model.fnl:115

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:109

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:7

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:458

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.extensions_inspector.util

Module neighborhood graph: DOT · SVG

fen.extensions.extensions_inspector.util module graph

fen.extensions.extensions_inspector.util.approx-tokens

(approx-tokens s) -> number

Estimate token count from text length for status displays when provider-reported usage is unavailable.

tags: commands, tokens, status

extensions/behaviors/inspectors/extensions/util.fnl:7

fen.extensions.extensions_inspector.util.safe-json

(safe-json v) -> string

JSON-encode a value for token estimation, falling back to tostring when encoding fails.

tags: commands, json, tokens

extensions/behaviors/inspectors/extensions/util.fnl:19

fen.extensions.extensions_inspector.util.content-tokens

(content-tokens content) -> number

Estimate tokens for canonical message content, including text, thinking blocks, and tool-call names/arguments.

tags: commands, tokens, messages

extensions/behaviors/inspectors/extensions/util.fnl:28

fen.extensions.extensions_inspector.util.estimated-context-tokens

(estimated-context-tokens agent) -> number

Estimate the current agent context size from system prompt, messages, content blocks, and tool-result names.

tags: commands, tokens, agent

extensions/behaviors/inspectors/extensions/util.fnl:51

fen.extensions.extensions_inspector.util.usage-totals

(usage-totals messages) -> Usage

Sum provider usage counters across assistant messages for status and session diagnostics.

tags: commands, tokens, usage

extensions/behaviors/inspectors/extensions/util.fnl:64

fen.extensions.extensions_inspector.util.fmt-tokens

(fmt-tokens n) -> string

Format a token count compactly with raw, k, or M suffixes for slash-command status output.

tags: commands, tokens, format

extensions/behaviors/inspectors/extensions/util.fnl:83

fen.extensions.extensions_inspector.util.format-token-summary

(format-token-summary usage approx) -> string

Build the one-line input/output/cache/context token summary shown by /status.

tags: commands, tokens, status

extensions/behaviors/inspectors/extensions/util.fnl:96

fen.extensions.extensions_inspector.util.runtime-version

(runtime-version) -> string

Return the build-stamped fen version, or unknown when running from source/tests without dist metadata.

tags: commands, status, version

extensions/behaviors/inspectors/extensions/util.fnl:109

fen.extensions.extensions_inspector.util.nth-arg

(nth-arg args n) -> string|nil

Extract the nth whitespace-delimited argument from a slash-command argument string.

tags: commands, args, parsing

extensions/behaviors/inspectors/extensions/util.fnl:120

fen.extensions.extensions_inspector.util.first-arg

(first-arg args) -> string|nil

Extract the first whitespace-delimited argument from a slash-command argument string.

tags: commands, args, parsing

extensions/behaviors/inspectors/extensions/util.fnl:129

fen.extensions.handoff

Module neighborhood graph: DOT · SVG

fen.extensions.handoff module graph

fen.extensions.handoff.register

extensions/behaviors/companions/handoff/init.fnl:153

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:135

fen.extensions.mem

Module neighborhood graph: DOT · SVG

fen.extensions.mem module graph

fen.extensions.mem.report-rows

(report-rows run-state opts?) -> [PresenterRow]

Build memory diagnostics rows for the /mem panel, including optional GC before/after output, app state, registries, and history.

tags: mem, panel, diagnostics, rows

extensions/behaviors/companions/mem/init.fnl:130

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:198

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:292

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:292

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:300

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.print

Module neighborhood graph: DOT · SVG

fen.extensions.print module graph

fen.extensions.print.run

(run ctx) -> nil

Execute the one-shot print presenter by stepping the agent with the supplied prompt and printing the final text.

tags: print, presenter, run

extensions/adapters/presenters/print/init.fnl:13

fen.extensions.print.register

[api]

extensions/adapters/presenters/print/init.fnl:29

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:99

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:15

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

string

Default anthropic-version header sent with Messages API requests.

tags: provider, anthropic, metadata

extensions/adapters/providers/anthropic/anthropic_messages.fnl:580

fen.extensions.provider_anthropic.anthropic_messages.provider

string

Default anthropic-version header sent with Messages API requests.

tags: provider, anthropic, metadata

extensions/adapters/providers/anthropic/anthropic_messages.fnl:580

fen.extensions.provider_anthropic.anthropic_messages.default-base-url

string

Default anthropic-version header sent with Messages API requests.

tags: provider, anthropic, metadata

extensions/adapters/providers/anthropic/anthropic_messages.fnl:580

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:580

fen.extensions.provider_anthropic.anthropic_messages.convert-messages

(convert-messages messages _system-prompt) -> [WireMessage]

Convert canonical messages into Anthropic Messages wire shape, batching consecutive tool results into one user message.

tags: provider, anthropic, messages, convert

extensions/adapters/providers/anthropic/anthropic_messages.fnl:98

fen.extensions.provider_anthropic.anthropic_messages.convert-tools

(convert-tools tools) -> [WireTool]

Convert canonical Tool descriptors into Anthropic flat tool specs with input_schema parameters.

tags: provider, anthropic, tools, convert

extensions/adapters/providers/anthropic/anthropic_messages.fnl:136

fen.extensions.provider_anthropic.anthropic_messages.map-stop-reason

(map-stop-reason reason) -> StopReason, error-message|nil

Map Anthropic stop_reason values onto canonical StopReason values and explanatory error strings.

tags: provider, anthropic, stop-reason

extensions/adapters/providers/anthropic/anthropic_messages.fnl:155

fen.extensions.provider_anthropic.anthropic_messages.parse-response

(parse-response resp model) -> AssistantMessage

Parse a non-streaming Anthropic Messages response into canonical assistant text, thinking, tool calls, usage, and stop reason.

tags: provider, anthropic, parse

extensions/adapters/providers/anthropic/anthropic_messages.fnl:175

fen.extensions.provider_anthropic.anthropic_messages.process-stream-event!

(process-stream-event! state ev emit) -> state

Fold one decoded Anthropic typed SSE event into stream state, content blocks, usage, and delta callbacks.

tags: provider, anthropic, streaming

extensions/adapters/providers/anthropic/anthropic_messages.fnl:433

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:580

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:468

fen.extensions.provider_anthropic.anthropic_messages.finalize-stream

string

Default anthropic-version header sent with Messages API requests.

tags: provider, anthropic, metadata

extensions/adapters/providers/anthropic/anthropic_messages.fnl:580

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, and optional thinking budget.

tags: provider, anthropic, request, cache

extensions/adapters/providers/anthropic/anthropic_messages.fnl:242

fen.extensions.provider_anthropic.anthropic_messages.complete

(complete model context options ?on-event ?yield-fn) -> AssistantMessage

Execute one Anthropic provider call, choosing streaming/non-streaming and cooperative/blocking transport from callbacks.

tags: provider, anthropic, complete

extensions/adapters/providers/anthropic/anthropic_messages.fnl:531

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:39

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) -> string

Return fen's writable Codex auth directory, honoring FEN_AUTH_DIR before the XDG fen config directory.

tags: codex, auth, storage, paths

extensions/adapters/providers/openai/openai_codex_keychain.fnl:23

fen.extensions.provider_openai.openai_codex_keychain.default-auth-path

(default-auth-path) -> string

Return the fen-owned auth.json path where Codex login, refresh, and logout persist credentials.

tags: codex, auth, storage, paths

extensions/adapters/providers/openai/openai_codex_keychain.fnl:34

fen.extensions.provider_openai.openai_codex_keychain.candidate-read-auth-paths

(candidate-read-auth-paths) -> [string]

Return credential read paths in priority order. Currently this is only fen's auth.json path.

tags: codex, auth, storage, paths

extensions/adapters/providers/openai/openai_codex_keychain.fnl:43

fen.extensions.provider_openai.openai_codex_keychain.load

(load ?path) -> table

Read and decode one auth.json file, returning an empty table for missing, unreadable, or malformed storage.

tags: codex, auth, storage, json

extensions/adapters/providers/openai/openai_codex_keychain.fnl:79

fen.extensions.provider_openai.openai_codex_keychain.get

(get provider-id ?path) -> table|nil

Return one provider credential record from the explicit path or fen-owned auth.json.

tags: codex, auth, storage, lookup

extensions/adapters/providers/openai/openai_codex_keychain.fnl:99

fen.extensions.provider_openai.openai_codex_keychain.save

(save data ?path) -> nil

Atomically write the full auth.json table, creating the parent directory and tightening file permissions to 0600.

tags: codex, auth, storage, write

extensions/adapters/providers/openai/openai_codex_keychain.fnl:109

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:138

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

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:271

fen.extensions.provider_openai.openai_codex_login.REDIRECT-URI

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:271

fen.extensions.provider_openai.openai_codex_login.SCOPE

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:271

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:271

fen.extensions.provider_openai.openai_codex_login.generate-pkce

(generate-pkce) -> {:verifier :challenge}

Generate a fresh PKCE verifier/challenge pair using platform randomness, SHA-256, and base64url encoding.

tags: codex, auth, login, pkce

extensions/adapters/providers/openai/openai_codex_login.fnl:66

fen.extensions.provider_openai.openai_codex_login.build-authorize-url

(build-authorize-url pkce state) -> string

Compose the ChatGPT OAuth authorization URL with PKCE challenge, state, scope, redirect URI, and Codex flow flags.

tags: codex, auth, login, pkce

extensions/adapters/providers/openai/openai_codex_login.fnl:80

fen.extensions.provider_openai.openai_codex_login.parse-authorization-input

(parse-authorization-input input) -> {:code :state}

Parse pasted Codex authorization input as full callback URL, raw query, code#state shorthand, or bare code.

tags: codex, auth, login, parse

extensions/adapters/providers/openai/openai_codex_login.fnl:123

fen.extensions.provider_openai.openai_codex_login.extract-query-param

(extract-query-param query key) -> string|nil

Extract and URL-decode one parameter from an OAuth callback query string.

tags: codex, auth, login, parse

extensions/adapters/providers/openai/openai_codex_login.fnl:100

fen.extensions.provider_openai.openai_codex_login.exchange-code!

(exchange-code! code verifier) -> CredentialRecord

Exchange an authorization code and PKCE verifier for Codex OAuth credentials, validating required token response fields.

tags: codex, auth, login, oauth

extensions/adapters/providers/openai/openai_codex_login.fnl:152

fen.extensions.provider_openai.openai_codex_login.login!

(login! ?path) -> CredentialRecord

Run the manual PKCE login flow, prompt for the callback code, exchange it, persist credentials, and print account status.

tags: codex, auth, login, oauth

extensions/adapters/providers/openai/openai_codex_login.fnl:217

fen.extensions.provider_openai.openai_codex_login.logout!

(logout! ?path) -> boolean

Remove the openai-codex credential record from auth.json and report whether anything was deleted.

tags: codex, auth, login, oauth

extensions/adapters/providers/openai/openai_codex_login.fnl:249

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

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:193

fen.extensions.provider_openai.openai_codex_oauth.TOKEN-URL

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:193

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:193

fen.extensions.provider_openai.openai_codex_oauth.decode-jwt

(decode-jwt token) -> table

Decode a JWT payload into a Lua table without signature verification for trusted on-disk Codex tokens.

tags: codex, auth, oauth, jwt

extensions/adapters/providers/openai/openai_codex_oauth.fnl:38

fen.extensions.provider_openai.openai_codex_oauth.extract-account-id

(extract-account-id access-token) -> string|nil

Extract chatgpt_account_id from the OpenAI auth claim in a Codex access-token JWT, returning nil on parse failure.

tags: codex, auth, oauth, jwt

extensions/adapters/providers/openai/openai_codex_oauth.fnl:53

fen.extensions.provider_openai.openai_codex_oauth.refresh!

(refresh! refresh-token) -> CredentialRecord

Exchange a refresh token at the OpenAI OAuth token endpoint and return a fresh Codex credential record.

tags: codex, auth, oauth, refresh

extensions/adapters/providers/openai/openai_codex_oauth.fnl:94

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:135

fen.extensions.provider_openai.openai_codex_oauth.configured?

(configured? ?path) -> boolean

Check whether auth.json contains a structurally usable openai-codex OAuth record without refreshing it.

tags: codex, auth, oauth, status

extensions/adapters/providers/openai/openai_codex_oauth.fnl:162

fen.extensions.provider_openai.openai_codex_oauth.get-fresh-creds!

(get-fresh-creds! ?path) -> CredentialRecord

Load Codex credentials, refresh and persist them when near expiry, or raise a friendly login-required error.

tags: codex, auth, oauth, refresh

extensions/adapters/providers/openai/openai_codex_oauth.fnl:176

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:81

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:71

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

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:157

fen.extensions.provider_openai.openai_codex_responses.provider

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:157

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:157

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:30

fen.extensions.provider_openai.openai_codex_responses.map-codex-event

(map-codex-event ev) -> table

Normalize Codex response.done and response.incomplete SSE aliases into the shared Responses reducer's response.completed event.

tags: codex, provider, responses, streaming

extensions/adapters/providers/openai/openai_codex_responses.fnl:64

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:50

fen.extensions.provider_openai.openai_codex_responses.merge-options

(merge-options opts) -> table

Copy provider options and add Codex defaults for encrypted reasoning includes and skipping unsupported max_output_tokens.

tags: codex, provider, responses, options

extensions/adapters/providers/openai/openai_codex_responses.fnl:87

fen.extensions.provider_openai.openai_codex_responses.complete

(complete model context options ?on-event ?yield-fn) -> AssistantMessage

Execute one ChatGPT Codex Responses call through the shared streaming pipeline with OAuth credentials and Codex event mapping.

tags: codex, provider, responses, complete

extensions/adapters/providers/openai/openai_codex_responses.fnl:110

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

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:667

fen.extensions.provider_openai.openai_completions.provider

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:667

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:667

fen.extensions.provider_openai.openai_completions.build-url

(build-url base-url) -> string

Normalize an OpenAI-compatible base URL into a Chat Completions endpoint while preserving fully-qualified legacy endpoints.

tags: provider, openai, completions, http

extensions/adapters/providers/openai/openai_completions.fnl:36

fen.extensions.provider_openai.openai_completions.convert-messages

(convert-messages messages system-prompt compat) -> [WireMessage]

Convert canonical messages and optional system prompt into OpenAI Chat Completions wire messages, synthesizing errors for orphaned tool calls.

tags: provider, openai, completions, messages

extensions/adapters/providers/openai/openai_completions.fnl:149

fen.extensions.provider_openai.openai_completions.convert-tools

(convert-tools tools) -> [WireTool]

Convert canonical Tool descriptors into OpenAI Chat Completions function-tool declarations.

tags: provider, openai, completions, tools

extensions/adapters/providers/openai/openai_completions.fnl:176

fen.extensions.provider_openai.openai_completions.map-stop-reason

(map-stop-reason reason) -> StopReason, error-message|nil

Map OpenAI finish_reason values onto canonical StopReason values, returning error text for provider-side stops.

tags: provider, openai, completions, stop-reason

extensions/adapters/providers/openai/openai_completions.fnl:196

fen.extensions.provider_openai.openai_completions.parse-response

(parse-response resp model) -> AssistantMessage

Parse a non-streaming OpenAI Chat Completions response into canonical assistant content, usage, tool calls, and stop reason.

tags: provider, openai, completions, parse

extensions/adapters/providers/openai/openai_completions.fnl:243

fen.extensions.provider_openai.openai_completions.process-stream-chunk!

(process-stream-chunk! state chunk emit) -> state

Fold one decoded streaming ChatCompletionChunk into stream state and emit text, thinking, and tool-call deltas.

tags: provider, openai, completions, streaming

extensions/adapters/providers/openai/openai_completions.fnl:490

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:667

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:548

fen.extensions.provider_openai.openai_completions.finalize-stream

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:667

fen.extensions.provider_openai.openai_completions.build-body

(build-body model context max-tokens compat options) -> table

Build the Chat Completions request body, applying models.json compat knobs for max-token fields, thinking formats, and parallel tools.

tags: provider, openai, completions, request

extensions/adapters/providers/openai/openai_completions.fnl:318

fen.extensions.provider_openai.openai_completions.complete

(complete model context options ?on-event ?yield-fn) -> AssistantMessage

Execute one Chat Completions provider call, choosing streaming/non-streaming and cooperative/blocking transport from callbacks.

tags: provider, openai, completions, complete

extensions/adapters/providers/openai/openai_completions.fnl:619

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

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:209

fen.extensions.provider_openai.openai_responses.provider

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:209

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:209

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:45

fen.extensions.provider_openai.openai_responses.build-body

(build-body model context max-tokens options) -> table

Build a streaming Responses request body from canonical context, provider options, tools, reasoning settings, and prompt cache keys.

tags: provider, openai, responses, request

extensions/adapters/providers/openai/openai_responses.fnl:53

fen.extensions.provider_openai.openai_responses.build-request-opts

(build-request-opts model context options on-chunk ?headers-override ?url-override) -> table

Assemble fen.util.http options for a streaming Responses POST, allowing Codex to override auth headers and endpoint URL.

tags: provider, openai, responses, http

extensions/adapters/providers/openai/openai_responses.fnl:134

fen.extensions.provider_openai.openai_responses.make-stream-pipeline

(make-stream-pipeline model on-event event-mapper) -> state, parser, parser-error

Create the SSE parser and shared Responses stream reducer state for one streaming request, with optional Codex event mapping.

tags: provider, openai, responses, streaming

extensions/adapters/providers/openai/openai_responses.fnl:107

fen.extensions.provider_openai.openai_responses.finalize-stream

(finalize-stream state parser parser-error model resp on-event) -> AssistantMessage

Finish the SSE parser, convert transport/parser/HTTP failures to assistant errors, or finalize shared Responses stream state.

tags: provider, openai, responses, streaming

extensions/adapters/providers/openai/openai_responses.fnl:161

fen.extensions.provider_openai.openai_responses.complete

(complete model context options ?on-event ?yield-fn) -> AssistantMessage

Execute one OpenAI Responses provider call through the streaming SSE pipeline with optional cooperative transport and event forwarding.

tags: provider, openai, responses, complete

extensions/adapters/providers/openai/openai_responses.fnl:172

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:960

fen.extensions.provider_openai.openai_responses_shared.build-body

(build-body model context max-tokens options ?id) -> table

Build a streaming Responses request body from canonical context, provider options, tools, reasoning settings, and prompt cache keys.

tags: provider, openai, responses, request

extensions/adapters/providers/openai/openai_responses_shared.fnl:970

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:1052

fen.extensions.provider_openai.openai_responses_shared.make-stream-pipeline

(make-stream-pipeline model on-event event-mapper) -> state, parser, parser-error

Create the SSE parser and shared Responses stream reducer state for one streaming request, with optional event mapping.

tags: provider, openai, responses, streaming

extensions/adapters/providers/openai/openai_responses_shared.fnl:1021

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:1077

fen.extensions.provider_openai.openai_responses_shared.convert-messages

(convert-messages messages ?id) -> [ResponseInputItem]

Convert canonical transcript messages into Responses input items, repairing persisted shapes that would otherwise 4xx forever (cross-model/cross-backend fc_/rs_ ids, lone reasoning items, orphaned tool outputs, reasoning-less tool-call turns).

tags: provider, openai, responses, messages

extensions/adapters/providers/openai/openai_responses_shared.fnl:395

fen.extensions.provider_openai.openai_responses_shared.convert-tools

(convert-tools tools) -> [ResponseTool]

Convert canonical Tool descriptors into Responses function-tool declarations with strict set to JSON null.

tags: provider, openai, responses, tools

extensions/adapters/providers/openai/openai_responses_shared.fnl:487

fen.extensions.provider_openai.openai_responses_shared.map-stop-reason

(map-stop-reason status) -> StopReason, error-message|nil

Map Responses API response statuses onto canonical StopReason values and provider error messages.

tags: provider, openai, responses, stop-reason

extensions/adapters/providers/openai/openai_responses_shared.fnl:509

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:552

fen.extensions.provider_openai.openai_responses_shared.process-event!

(process-event! state event emit) -> nil

Dispatch one decoded Responses SSE event into reducer state, updating content, usage, errors, and delta callbacks.

tags: provider, openai, responses, streaming

extensions/adapters/providers/openai/openai_responses_shared.fnl:860

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:926

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:578

fen.extensions.provider_openai.openai_responses_shared.write-failure-diagnostic!

extensions/adapters/providers/openai/openai_responses_shared.fnl:1154

fen.extensions.provider_openai.openai_responses_shared.failure-diagnostic

extensions/adapters/providers/openai/openai_responses_shared.fnl:1154

fen.extensions.provider_openai.openai_responses_shared.attach-diagnostic!

extensions/adapters/providers/openai/openai_responses_shared.fnl:1154

fen.extensions.provider_openai.openai_responses_shared.redact-headers

extensions/adapters/providers/openai/openai_responses_shared.fnl:1154

fen.extensions.provider_openai.openai_responses_shared.summarize-body

extensions/adapters/providers/openai/openai_responses_shared.fnl:1154

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:1134

fen.extensions.provider_openai.openai_responses_shared.split-compound-id

(split-compound-id id) -> call-id, item-id|nil

Split Fen's compound Responses tool-call id into call_id and item_id components for wire conversion.

tags: provider, openai, responses, tools

extensions/adapters/providers/openai/openai_responses_shared.fnl:285

fen.extensions.provider_openai.openai_responses_shared.parse-streaming-json

(parse-streaming-json s) -> table

Best-effort JSON parser for in-flight streamed tool arguments, returning an empty table until complete JSON is available.

tags: provider, openai, responses, streaming

extensions/adapters/providers/openai/openai_responses_shared.fnl:539

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:142

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.queue.util

Module neighborhood graph: DOT · SVG

fen.extensions.queue.util module graph

fen.extensions.queue.util.approx-tokens

(approx-tokens s) -> number

Estimate token count from text length for status displays when provider-reported usage is unavailable.

tags: commands, tokens, status

extensions/behaviors/inspectors/queue/util.fnl:7

fen.extensions.queue.util.safe-json

(safe-json v) -> string

JSON-encode a value for token estimation, falling back to tostring when encoding fails.

tags: commands, json, tokens

extensions/behaviors/inspectors/queue/util.fnl:19

fen.extensions.queue.util.content-tokens

(content-tokens content) -> number

Estimate tokens for canonical message content, including text, thinking blocks, and tool-call names/arguments.

tags: commands, tokens, messages

extensions/behaviors/inspectors/queue/util.fnl:28

fen.extensions.queue.util.estimated-context-tokens

(estimated-context-tokens agent) -> number

Estimate the current agent context size from system prompt, messages, content blocks, and tool-result names.

tags: commands, tokens, agent

extensions/behaviors/inspectors/queue/util.fnl:51

fen.extensions.queue.util.usage-totals

(usage-totals messages) -> Usage

Sum provider usage counters across assistant messages for status and session diagnostics.

tags: commands, tokens, usage

extensions/behaviors/inspectors/queue/util.fnl:64

fen.extensions.queue.util.fmt-tokens

(fmt-tokens n) -> string

Format a token count compactly with raw, k, or M suffixes for slash-command status output.

tags: commands, tokens, format

extensions/behaviors/inspectors/queue/util.fnl:83

fen.extensions.queue.util.format-token-summary

(format-token-summary usage approx) -> string

Build the one-line input/output/cache/context token summary shown by /status.

tags: commands, tokens, status

extensions/behaviors/inspectors/queue/util.fnl:96

fen.extensions.queue.util.runtime-version

(runtime-version) -> string

Return the build-stamped fen version, or unknown when running from source/tests without dist metadata.

tags: commands, status, version

extensions/behaviors/inspectors/queue/util.fnl:109

fen.extensions.queue.util.nth-arg

(nth-arg args n) -> string|nil

Extract the nth whitespace-delimited argument from a slash-command argument string.

tags: commands, args, parsing

extensions/behaviors/inspectors/queue/util.fnl:120

fen.extensions.queue.util.first-arg

(first-arg args) -> string|nil

Extract the first whitespace-delimited argument from a slash-command argument string.

tags: commands, args, parsing

extensions/behaviors/inspectors/queue/util.fnl:129

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) -> Session

Allocate a future append-only JSONL session path for cwd without creating the file until the first appended message.

tags: session, jsonl, open

extensions/adapters/session-backends/jsonl/session.fnl:196

fen.extensions.session_jsonl.session.open-existing

(open-existing p) -> Session|nil

Open an existing session JSONL for append without writing a duplicate header, preserving header id and cwd.

tags: session, jsonl, resume

extensions/adapters/session-backends/jsonl/session.fnl:461

fen.extensions.session_jsonl.session.append

(append session msg) -> nil

Lazily open the session file if needed and append one canonical AgentMessage as a JSONL :message entry.

tags: session, jsonl, append

extensions/adapters/session-backends/jsonl/session.fnl:262

fen.extensions.session_jsonl.session.append-entry

(append-entry session entry) -> entry|nil

Lazily open the session file and append one JSONL entry with stable id, parent-id, and timestamp metadata.

tags: session, jsonl, append, entries, ids

extensions/adapters/session-backends/jsonl/session.fnl:236

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:283

fen.extensions.session_jsonl.session.latest-for-cwd

(latest-for-cwd cwd) -> string|nil

Return the newest non-empty session JSONL path for cwd by scanning the cwd session directory newest first.

tags: session, jsonl, discovery

extensions/adapters/session-backends/jsonl/session.fnl:374

fen.extensions.session_jsonl.session.list-for-cwd

(list-for-cwd cwd limit) -> [SessionInfo]

Return recent non-empty session metadata records for cwd in reverse chronological order, capped by limit.

tags: session, jsonl, discovery

extensions/adapters/session-backends/jsonl/session.fnl:444

fen.extensions.session_jsonl.session.header

(header p) -> table|nil

Read and decode the first JSONL header entry from a session file, returning nil for unreadable or non-session headers.

tags: session, jsonl, inspect

extensions/adapters/session-backends/jsonl/session.fnl:391

fen.extensions.session_jsonl.session.title

(title p) -> string|nil

Return a human-readable transcript title from the first user text, falling back to the first assistant text.

tags: session, jsonl, inspect

extensions/adapters/session-backends/jsonl/session.fnl:416

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:366

fen.extensions.session_jsonl.session.find

(find cwd target) -> string|nil

Resolve a resume target as latest, list index, existing path, exact id, or unique id/path prefix within cwd sessions.

tags: session, jsonl, resume

extensions/adapters/session-backends/jsonl/session.fnl:474

fen.extensions.session_jsonl.session.load

(load path) -> [Message]

Read a session JSONL file and return replayable canonical messages, applying the latest valid compaction entry when present.

tags: session, jsonl, replay, compaction

extensions/adapters/session-backends/jsonl/session.fnl:537

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:562

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:7

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:312

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:213

fen.extensions.skills.discover

(discover extra-paths?) -> [Skill]

Scan default and explicit skill roots, respecting ignore files and deduplicating by canonical path and name.

tags: skills, discovery, roots

extensions/behaviors/companions/skills/init.fnl:341

fen.extensions.skills.system-prompt-section

(system-prompt-section skills) -> string|nil

Render discovered model-invokable skills as the XML prompt fragment consumed by the default prompt.

tags: skills, prompt, xml

extensions/behaviors/companions/skills/init.fnl:361

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:389

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:396

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:402

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:408

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:415

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:422

fen.extensions.skills.skills-text

[skills ?filter]

extensions/behaviors/companions/skills/init.fnl:476

fen.extensions.skills.skill-detail-lines

[skill]

extensions/behaviors/companions/skills/init.fnl:536

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:756

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:756

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:64

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) -> [IgnoreRule]

Return a copied ignore-rule chain extended with .gitignore, .ignore, and .fdignore files from one directory.

tags: skills, ignore, rules, discovery

extensions/behaviors/companions/skills/ignore.fnl:75

fen.extensions.skills.ignore.load-chain

(load-chain root) -> [IgnoreRule]

Collect ignore rules from ancestor directories root-to-leaf for skill discovery traversal.

tags: skills, ignore, rules, discovery

extensions/behaviors/companions/skills/ignore.fnl:86

fen.extensions.skills.ignore.match?

(match? target is-dir? rules) -> boolean

Decide whether a path is ignored by the rule chain, with later negated or matching rules taking precedence.

tags: skills, ignore, rules, match

extensions/behaviors/companions/skills/ignore.fnl:151

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:151

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.approx-tokens

(approx-tokens s) -> number

Estimate token count from text length for status displays when provider-reported usage is unavailable.

tags: commands, tokens, status

extensions/behaviors/inspectors/status/util.fnl:7

fen.extensions.status.util.safe-json

(safe-json v) -> string

JSON-encode a value for token estimation, falling back to tostring when encoding fails.

tags: commands, json, tokens

extensions/behaviors/inspectors/status/util.fnl:19

fen.extensions.status.util.content-tokens

(content-tokens content) -> number

Estimate tokens for canonical message content, including text, thinking blocks, and tool-call names/arguments.

tags: commands, tokens, messages

extensions/behaviors/inspectors/status/util.fnl:28

fen.extensions.status.util.estimated-context-tokens

(estimated-context-tokens agent) -> number

Estimate the current agent context size from system prompt, messages, content blocks, and tool-result names.

tags: commands, tokens, agent

extensions/behaviors/inspectors/status/util.fnl:51

fen.extensions.status.util.usage-totals

(usage-totals messages) -> Usage

Sum provider usage counters across assistant messages for status and session diagnostics.

tags: commands, tokens, usage

extensions/behaviors/inspectors/status/util.fnl:64

fen.extensions.status.util.fmt-tokens

(fmt-tokens n) -> string

Format a token count compactly with raw, k, or M suffixes for slash-command status output.

tags: commands, tokens, format

extensions/behaviors/inspectors/status/util.fnl:83

fen.extensions.status.util.format-token-summary

(format-token-summary usage approx) -> string

Build the one-line input/output/cache/context token summary shown by /status.

tags: commands, tokens, status

extensions/behaviors/inspectors/status/util.fnl:96

fen.extensions.status.util.runtime-version

(runtime-version) -> string

Return the build-stamped fen version, or unknown when running from source/tests without dist metadata.

tags: commands, status, version

extensions/behaviors/inspectors/status/util.fnl:109

fen.extensions.status.util.nth-arg

(nth-arg args n) -> string|nil

Extract the nth whitespace-delimited argument from a slash-command argument string.

tags: commands, args, parsing

extensions/behaviors/inspectors/status/util.fnl:129

fen.extensions.status.util.first-arg

(first-arg args) -> string|nil

Extract the first whitespace-delimited argument from a slash-command argument string.

tags: commands, args, parsing

extensions/behaviors/inspectors/status/util.fnl:138

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:114

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:153

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:168

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:183

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:197

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:216

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:224

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:235

fen.extensions.stdio.register

[api]

extensions/adapters/presenters/stdio/init.fnl:261

fen.extensions.todo

Module neighborhood graph: DOT · SVG

fen.extensions.todo module graph

fen.extensions.todo.register

extensions/behaviors/companions/todo/init.fnl:341

fen.extensions.todo.register!

extensions/behaviors/companions/todo/init.fnl:342

fen.extensions.todo.execute

extensions/behaviors/companions/todo/init.fnl:343

fen.extensions.todo.validate-items

extensions/behaviors/companions/todo/init.fnl:344

fen.extensions.todo.copy-items

extensions/behaviors/companions/todo/init.fnl:345

fen.extensions.todo.counts

extensions/behaviors/companions/todo/init.fnl:346

fen.extensions.todo.summary-line

extensions/behaviors/companions/todo/init.fnl:347

fen.extensions.todo.render-text

extensions/behaviors/companions/todo/init.fnl:348

fen.extensions.todo.panel-spec

extensions/behaviors/companions/todo/init.fnl:349

fen.extensions.todo.rebuild-from-messages!

extensions/behaviors/companions/todo/init.fnl:350

fen.extensions.todo._state

extensions/behaviors/companions/todo/init.fnl:351

fen.extensions.todo._test

extensions/behaviors/companions/todo/init.fnl:352

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.init!

(init!) -> nil

Initialize or refresh termbox runtime state, terminal modes, dimensions, and bracketed paste support.

tags: tui, lifecycle, termbox, reload

extensions/adapters/presenters/tui/init.fnl:92

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:142

fen.extensions.tui.hard-refresh!

(hard-refresh!) -> nil

Recover from external terminal corruption by re-asserting terminal modes and forcing a full repaint.

tags: tui, lifecycle, redraw, termbox

extensions/adapters/presenters/tui/init.fnl:158

fen.extensions.tui.suspend!

(suspend!) -> nil

Ctrl-Z job-control suspend: restore the terminal, stop with SIGTSTP, then re-init and repaint on resume.

tags: tui, lifecycle, suspend, termbox, signal

extensions/adapters/presenters/tui/init.fnl:172

fen.extensions.tui.reset-conversation!

(reset-conversation!) -> nil

Clear transcript, streaming, input, paste, scroll, and per-turn status state while preserving UI identity.

tags: tui, lifecycle, session, reset

extensions/adapters/presenters/tui/init.fnl:189

fen.extensions.tui.set-status-info

(set-status-info info) -> nil

Merge provider, model, queue, and context details into the persistent TUI status line state.

tags: tui, status, presenter

extensions/adapters/presenters/tui/init.fnl:237

fen.extensions.tui.input-meta

[?ev]

extensions/adapters/presenters/tui/init.fnl:291

fen.extensions.tui.warn-if-stalled!

[phase start-ms ?get-turn ?ev]

extensions/adapters/presenters/tui/init.fnl:306

fen.extensions.tui.peek-timeout-ms

(peek-timeout-ms is-busy?) -> number

Choose a short or idle termbox poll timeout based on dirty state, Alt resolution, busy work, and animation needs.

tags: tui, loop, polling, performance

extensions/adapters/presenters/tui/init.fnl:333

fen.extensions.tui.interrupted-syscall?

(interrupted-syscall? err) -> boolean

True when a peek_event error string is a transient signal-interrupted syscall (EINTR), which must not be treated as session-fatal.

tags: tui, loop, termbox, signal, eintr

extensions/adapters/presenters/tui/init.fnl:350

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:374

fen.extensions.tui.register

[api]

extensions/adapters/presenters/tui/init.fnl:455

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:14

fen.extensions.tui.draw.fill-row

(fill-row y x0 x1 ch fg bg) -> nil

Fill a clipped horizontal row segment with one termbox print call to reduce Lua-to-C overhead.

tags: tui, draw, termbox, performance

extensions/adapters/presenters/tui/draw.fnl:23

fen.extensions.tui.draw.utf8-prefix-cols

(utf8-prefix-cols s cols) -> string

Return a display-column-limited UTF-8 prefix without cutting multibyte characters in the middle.

tags: tui, draw, utf8, clipping

extensions/adapters/presenters/tui/draw.fnl:39

fen.extensions.tui.draw.put-clipped

(put-clipped x y fg bg s width-cap) -> nil

Print clipped text at an in-bounds coordinate while respecting both terminal width and caller cap.

tags: tui, draw, termbox, clipping

extensions/adapters/presenters/tui/draw.fnl:74

fen.extensions.tui.ingest

Module neighborhood graph: DOT · SVG

fen.extensions.tui.ingest module graph

fen.extensions.tui.ingest.append-event

(append-event ev) -> nil

Ingest a bus event into transcript rows and TUI status side effects, including streaming coalescing and cache invalidation.

tags: tui, ingest, events, transcript, status

extensions/adapters/presenters/tui/ingest.fnl:84

fen.extensions.tui.input

Module neighborhood graph: DOT · SVG

fen.extensions.tui.input module graph

fen.extensions.tui.input.ensure-defaults!

(ensure-defaults!) -> nil

Backfill persistent input buffer, paste, history, quit, cancel, and Alt state fields after hot reloads.

tags: tui, input, state, reload

extensions/adapters/presenters/tui/input.fnl:36

fen.extensions.tui.input.input-display-rows

(input-display-rows buf width cursor) -> [InputDisplayRow]

Wrap the input buffer into prompt and continuation rows that preserve byte offsets for cursor placement.

tags: tui, input, wrapping, cursor

extensions/adapters/presenters/tui/input.fnl:58

fen.extensions.tui.input.cursor-display-pos

(cursor-display-pos rows cursor) -> row-index col

Locate the cursor within wrapped input rows using the same byte-offset view that painting uses.

tags: tui, input, cursor, wrapping

extensions/adapters/presenters/tui/input.fnl:115

fen.extensions.tui.input.input-rows

(input-rows) -> number

Return the current input region height, capped for multiline editing and terminal layout stability.

tags: tui, input, layout

extensions/adapters/presenters/tui/input.fnl:130

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:143

fen.extensions.tui.input.handle-key

(handle-key ev on-submit on-cancel is-busy?) -> boolean|nil

Dispatch a termbox key event into buffer edits, history movement, submission, cancellation, or quit handling.

tags: tui, input, keyboard, events

extensions/adapters/presenters/tui/input.fnl:525

fen.extensions.tui.input.handle-mouse

(handle-mouse ev) -> nil

Interpret mouse wheel and click events for transcript scrolling, panel focus, and redraw invalidation.

tags: tui, input, mouse, scroll

extensions/adapters/presenters/tui/input.fnl:713

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:730

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:574

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:581

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:588

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:595

fen.extensions.tui.markdown.render

(render s width) -> [PresenterRow]

Compatibility alias for render-text used by transcript rendering and tests.

tags: tui, markdown, render, text

extensions/adapters/presenters/tui/markdown.fnl:602

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:609

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!) -> nil

Backfill persistent paint, transcript, status, errors, spinner, and input defaults after reloads.

tags: tui, paint, state, reload

extensions/adapters/presenters/tui/paint.fnl:46

fen.extensions.tui.paint.max-scroll

(max-scroll) -> number

Return the maximum transcript scroll offset after accounting for the current input area height.

tags: tui, paint, scroll, transcript

extensions/adapters/presenters/tui/paint.fnl:60

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:126

fen.extensions.tui.paint.fmt-tokens

function

Compact token-count formatter alias used by status renderers and tests.

tags: tui, paint, status, tokens

extensions/adapters/presenters/tui/paint.fnl:177

fen.extensions.tui.paint.paint-status

(paint-status layout) -> nil

Delegate status-line painting to the status panel module while preserving the paint facade entrypoint.

tags: tui, paint, status, delegate

extensions/adapters/presenters/tui/paint.fnl:186

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:247

fen.extensions.tui.paint.paint-transcript

(paint-transcript layout) -> nil

Paint the visible transcript viewport rows into the reserved transcript region.

tags: tui, paint, transcript, viewport

extensions/adapters/presenters/tui/paint.fnl:263

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:280

fen.extensions.tui.paint.invalidate!

(invalidate!) -> nil

Mark the TUI dirty so the next presenter-loop pass repaints the terminal.

tags: tui, paint, redraw, dirty

extensions/adapters/presenters/tui/paint.fnl:290

fen.extensions.tui.paint.invalidate-full!

(invalidate-full!) -> nil

Request a cache-clearing repaint for resize, reload, and display toggles that invalidate wrapped rows.

tags: tui, paint, redraw, cache

extensions/adapters/presenters/tui/paint.fnl:299

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:309

fen.extensions.tui.paint.advance-spinner-if-due!

(advance-spinner-if-due!) -> nil

Advance the status spinner on a throttled presenter-loop tick cadence and invalidate when it changes.

tags: tui, paint, spinner, animation

extensions/adapters/presenters/tui/paint.fnl:318

fen.extensions.tui.paint.redraw-if-needed!

(redraw-if-needed!) -> nil

Repaint only when dirty or forced, clearing caches and terminal geometry before forced redraws.

tags: tui, paint, redraw, performance

extensions/adapters/presenters/tui/paint.fnl:337

fen.extensions.tui.paint.paint-frame!

(paint-frame!) -> nil

Paint a complete frame into the termbox back buffer without presenting, allowing overlays to share the underlay.

tags: tui, paint, frame, termbox

extensions/adapters/presenters/tui/paint.fnl:358

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:380

fen.extensions.tui.paint.clear-render-caches!

(clear-render-caches!) -> nil

Drop transcript render caches so forced repaints or reloads recompute rows with current renderers.

tags: tui, paint, cache, transcript

extensions/adapters/presenters/tui/paint.fnl:390

fen.extensions.tui.paint.force-redraw!

(force-redraw!) -> nil

Blank-present and repaint the full terminal to resynchronize termbox front-buffer assumptions.

tags: tui, paint, redraw, termbox

extensions/adapters/presenters/tui/paint.fnl:401

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:15

fen.extensions.tui.panels.busy.turn-elapsed

(turn-elapsed) -> string

Return elapsed turn time text for the busy panel, or an empty string when no turn is active.

tags: tui, panel, busy, timing

extensions/adapters/presenters/tui/panels/busy.fnl:28

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:58

fen.extensions.tui.panels.busy.render

(render ctx) -> [PresenterRow]

Render spinner, busy label, retry delay, and elapsed time rows for the active turn.

tags: tui, panel, busy, render

extensions/adapters/presenters/tui/panels/busy.fnl:66

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:79

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:15

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:63

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:74

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:108

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:121

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!) -> nil

Backfill persistent status-info fields, token counters, retry state, queue counts, and running-label migration.

tags: tui, panel, status, state, reload

extensions/adapters/presenters/tui/panels/status.fnl:28

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:98

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:19

fen.extensions.tui.panels.transcript.ensure-defaults!

(ensure-defaults!) -> nil

Backfill persistent transcript, streaming, scroll, Markdown, and tool-result display state after reloads.

tags: tui, transcript, state, reload

extensions/adapters/presenters/tui/panels/transcript.fnl:26

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:57

fen.extensions.tui.panels.transcript.content-

(content->text content) -> string

Concatenate text blocks from an AgentToolResult content list for tool-result previews.

tags: tui, transcript, tools, results

extensions/adapters/presenters/tui/panels/transcript.fnl:68

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:82

fen.extensions.tui.panels.transcript.count-lines

(count-lines s) -> number

Count displayable newline-delimited lines for transcript summaries and tool-result metadata.

tags: tui, transcript, lines, tools

extensions/adapters/presenters/tui/panels/transcript.fnl:91

fen.extensions.tui.panels.transcript.lookup-tool-call

(lookup-tool-call tool-call-id) -> table|nil

Find the matching prior tool-call event for a tool result by scanning the transcript tail.

tags: tui, transcript, tools, lookup

extensions/adapters/presenters/tui/panels/transcript.fnl:140

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:177

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:235

fen.extensions.tui.panels.transcript.event-text

(event-text ev) -> string

Materialize streaming text chunks lazily and return the event's display text.

tags: tui, transcript, streaming, text

extensions/adapters/presenters/tui/panels/transcript.fnl:283

fen.extensions.tui.panels.transcript.invalidate-layout-cache!

(invalidate-layout-cache!) -> nil

Drop the transcript-wide row-count cache after event changes or rendering toggles.

tags: tui, transcript, cache, layout

extensions/adapters/presenters/tui/panels/transcript.fnl:481

fen.extensions.tui.panels.transcript.clear-event-render-cache!

(clear-event-render-cache! ev) -> nil

Clear one event's Markdown and wrapped-row caches and invalidate transcript layout.

tags: tui, transcript, cache, event

extensions/adapters/presenters/tui/panels/transcript.fnl:491

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:519

fen.extensions.tui.panels.transcript.viewport-lines

(viewport-lines width region-h) -> [PresenterRow]

Return visible transcript rows using lazy tail rendering near the end and indexed cache for deep scroll.

tags: tui, transcript, viewport, scroll

extensions/adapters/presenters/tui/panels/transcript.fnl:638

fen.extensions.tui.panels.transcript.max-scroll

(max-scroll input-rows) -> number

Compute the maximum useful transcript scroll offset for current terminal and input heights.

tags: tui, transcript, scroll, layout

extensions/adapters/presenters/tui/panels/transcript.fnl:653

fen.extensions.tui.panels.transcript.jump-to-user-message!

(jump-to-user-message! input-rows) -> boolean

Move the transcript viewport to the latest relevant user-authored message, repeating through older messages.

tags: tui, transcript, scroll, navigation, keyboard

extensions/adapters/presenters/tui/panels/transcript.fnl:672

fen.extensions.tui.panels.transcript.clear-render-caches!

(clear-render-caches!) -> nil

Clear cached rows for every transcript event so a forced repaint uses current renderers.

tags: tui, transcript, cache, reload

extensions/adapters/presenters/tui/panels/transcript.fnl:733

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:11

fen.extensions.tui.redraw.invalidate!

(invalidate!) -> nil

Mark the TUI dirty so the next presenter-loop pass repaints the terminal.

tags: tui, redraw, dirty

extensions/adapters/presenters/tui/redraw.fnl:23

fen.extensions.tui.redraw.invalidate-full!

(invalidate-full!) -> nil

Request a cache-clearing repaint for resize, reload, and display toggles that invalidate wrapped rows.

tags: tui, redraw, cache

extensions/adapters/presenters/tui/redraw.fnl:33

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 match the current selector filter text.

tags: tui, select, filter, choices

extensions/adapters/presenters/tui/select.fnl:46

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:63

fen.extensions.tui.select.make-state

(make-state opts) -> SelectState

Create the pure selector state record used by tests and the termbox overlay loop.

tags: tui, select, state

extensions/adapters/presenters/tui/select.fnl:80

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:95

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:249

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:10

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:16

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:22

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:28

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:34

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:40

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:46

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:52

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:58

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:64

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:70

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:76

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:82

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:88

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:94

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:100

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:106

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:112

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:118

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:124

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:130

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:136

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:142

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:148

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:154

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:160

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:166

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:172

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:178

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:184

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:190

fen.extensions.tui.state.last-stall-warn-ms

extensions/adapters/presenters/tui/state.fnl:202

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:196

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:73

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:81

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:89

fen.extensions.web.register

[api]

extensions/adapters/presenters/web/init.fnl:98

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:79

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:115

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:186

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:66

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:73

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:233

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:68

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:247

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:255

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:271

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:287

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:310

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:334

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.base64

Module neighborhood graph: DOT · SVG

fen.util.base64 module graph

fen.util.base64.decode-standard

(decode-standard s) -> string

Decode a standard base64 string with optional padding into its raw byte string for trusted token payloads.

tags: util, encoding, base64

packages/util/src/fen/util/base64.fnl:20

fen.util.base64.decode-url

(decode-url s) -> string|nil

Decode an unpadded base64url string by restoring the standard alphabet and padding before decoding.

tags: util, encoding, base64

packages/util/src/fen/util/base64.fnl:50

fen.util.base64.encode-standard

(encode-standard bytes) -> string

Encode a raw byte string as standard base64 with RFC-style = padding.

tags: util, encoding, base64

packages/util/src/fen/util/base64.fnl:68

fen.util.base64.encode-url

(encode-url bytes) -> string|nil

Encode raw bytes as unpadded base64url for PKCE and token-related wire formats.

tags: util, encoding, base64

packages/util/src/fen/util/base64.fnl:105

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 used by reload-change diagnostics.

tags: util, checksum, reload

packages/util/src/fen/util/checksum.fnl:6

fen.util.checksum.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

packages/util/src/fen/util/checksum.fnl:56

fen.util.checksum.module-fingerprint

(module-fingerprint modname) -> table|nil

Resolve and fingerprint a Lua module source file, returning nil when the module has no package.path file.

tags: util, checksum, modules, reload

packages/util/src/fen/util/checksum.fnl:70

fen.util.flat_extensions

Module neighborhood graph: DOT · SVG

fen.util.flat_extensions module graph

fen.util.flat_extensions.build-map

(build-map roots) -> table

Walk flat extension roots and build the manifest :name to directory map used by the namespace searcher.

tags: util, extensions, searcher

packages/util/src/fen/util/flat_extensions.fnl:118

fen.util.flat_extensions.resolve-fnl

(resolve-fnl map modname) -> string|nil

Return the flat source path for a fen.extensions module from a manifest-name map.

tags: util, extensions, searcher, reload

packages/util/src/fen/util/flat_extensions.fnl:137

fen.util.flat_extensions.make-searcher

(make-searcher fennel map) -> searcher-fn

Build a package.searchers entry that maps fen.extensions.<name> modules back to flat extension source files.

tags: util, extensions, searcher

packages/util/src/fen/util/flat_extensions.fnl:158

fen.util.flat_extensions.install!

(install! opts) -> searcher-fn

Build and insert the flat-extension searcher into package.searchers at the requested position.

tags: util, extensions, searcher

packages/util/src/fen/util/flat_extensions.fnl:175

fen.util.http

Module neighborhood graph: DOT · SVG

fen.util.http module graph

fen.util.http.request

(request opts) -> {:status :body :headers}|{:error}

Perform an HTTP request through the selected backend, supporting streaming chunks and cooperative yielding.

tags: util, http, providers

packages/util/src/fen/util/http/init.fnl:14

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:36

fen.util.id

Module neighborhood graph: DOT · SVG

fen.util.id module graph

fen.util.id.random-hex

[n]

packages/util/src/fen/util/id.fnl:20

fen.util.id.uuidv7

[]

packages/util/src/fen/util/id.fnl:38

fen.util.json

Module neighborhood graph: DOT · SVG

fen.util.json module graph

fen.util.json.encode

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:9

fen.util.json.decode

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:9

fen.util.json.null

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:9

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:9

fen.util.log

Module neighborhood graph: DOT · SVG

fen.util.log module graph

fen.util.log.debug

(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:25

fen.util.log.info

(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:25

fen.util.log.warn

(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:25

fen.util.log.error

(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:25

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:25

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:16

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:18

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:31

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:41

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:49

fen.util.path

Module neighborhood graph: DOT · SVG

fen.util.path module graph

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.fnl:16

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.fnl:24

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.fnl:35

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.fnl:43

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.fnl:54

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.fnl:62

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.fnl:73

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.fnl:81

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.fnl:89

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.fnl:97

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.fnl:108

fen.util.path.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, shell

packages/util/src/fen/util/path.fnl:116

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.fnl:129

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.fnl:137

fen.util.path.file-exists?

(file-exists? path) -> boolean

Return true only for regular files, preferring LuaFileSystem and falling back to POSIX test -f.

tags: util, paths, filesystem

packages/util/src/fen/util/path.fnl:174

fen.util.path.dir-exists?

(dir-exists? path) -> boolean

Return true only for directories, preferring LuaFileSystem and falling back to POSIX test -d.

tags: util, paths, filesystem

packages/util/src/fen/util/path.fnl:186

fen.util.path.ancestors-root-to-leaf

(ancestors-root-to-leaf start) -> [string]

Return a physical ancestor chain from / to start for deterministic project-context discovery.

tags: util, paths, discovery

packages/util/src/fen/util/path.fnl:195

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) -> string

Drain a popen pipe in nonblocking chunks, yielding on EAGAIN so cooperative tool execution keeps the UI responsive.

tags: util, process, cooperative

packages/util/src/fen/util/process.fnl:27

fen.util.process.read-pipe-close

(read-pipe-close pipe yield-fn?) -> string

Drain and close a popen pipe, guaranteeing close runs even when cooperative cancellation raises through yield-fn.

tags: util, process, cooperative, popen

packages/util/src/fen/util/process.fnl:62

fen.util.process.run-captured

(run-captured opts yield-fn?) -> table

Run a shell command with cooperative output capture, timeout/cancel cleanup, bounded inline output, and optional full-output spill file.

tags: util, process, subprocess, timeout, cooperative

packages/util/src/fen/util/process.fnl:147

fen.util.process.monotonic-ms

packages/util/src/fen/util/process.fnl:367

fen.util.process.sleep-ms

packages/util/src/fen/util/process.fnl:367

fen.util.random

Module neighborhood graph: DOT · SVG

fen.util.random module graph

fen.util.random.bytes

(bytes n) -> string

Return n cryptographically random raw bytes from the platform RNG through the fen_random native binding.

tags: util, random, crypto

packages/util/src/fen/util/random.fnl:11

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:20

fen.util.search.bitap.match

[compiled raw-text ?opts]

packages/util/src/fen/util/search/bitap.fnl:109

fen.util.search.bitap.score

[compiled raw-text]

packages/util/src/fen/util/search/bitap.fnl:118

fen.util.sha256

Module neighborhood graph: DOT · SVG

fen.util.sha256 module graph

fen.util.sha256.digest

(digest bytes) -> string

Compute SHA-256 for a Lua string and return the 32-byte raw digest used by PKCE challenge construction.

tags: util, crypto, sha256

packages/util/src/fen/util/sha256.fnl:98

fen.util.sha256.hex-digest

(hex-digest bytes) -> string

Compute SHA-256 for a Lua string and return the lowercase 64-character hexadecimal digest.

tags: util, crypto, sha256

packages/util/src/fen/util/sha256.fnl:117

fen.util.sse

Module neighborhood graph: DOT · SVG

fen.util.sse module graph

fen.util.sse.new-parser

(new-parser on-event) -> parser

Create an incremental Server-Sent Events parser that accepts arbitrary chunks and dispatches complete event tables.

tags: util, sse, streaming

packages/util/src/fen/util/sse.fnl:28

fen.util.sse.parse

(parse raw) -> [SseEvent]

Parse a complete Server-Sent Events payload into event tables, flushing any final unterminated line.

tags: util, sse, streaming

packages/util/src/fen/util/sse.fnl:99

fen.util.sse.json-events

(json-events raw) -> [table]

Parse an SSE payload and JSON-decode every non-empty, non-[DONE] data field for provider tests and adapters.

tags: util, sse, json

packages/util/src/fen/util/sse.fnl:112

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:227

fen.util.text.MAX-SCAN-BYTES

packages/util/src/fen/util/text.fnl:227

fen.util.text.default-tool-result-max-bytes

packages/util/src/fen/util/text.fnl:227

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:11

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:19

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:97

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:174

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) -> nil

Replace os.getenv in tests with a resolver that can delegate to the original environment lookup.

tags: testing, env, stubs

packages/testing/src/fen/testing/init.fnl:23

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:34

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:42

fen.testing.stub-http!

(stub-http! responder) -> nil

Replace fen.util.http's backend with a test responder and clear the cached frontend module.

tags: testing, http, stubs

packages/testing/src/fen/testing/init.fnl:51

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:65

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:74

fen.testing.rmtree

(rmtree path) -> nil

Remove an owned temporary directory tree, refusing arbitrary or unsafe paths.

tags: testing, temp, files, safety

packages/testing/src/fen/testing/init.fnl:87

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:106

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:120

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:131

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:143

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:154

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:170

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:183

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:14

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:28

fen.testing.pty

Module neighborhood graph: DOT · SVG

fen.testing.pty module graph

fen.testing.pty.spawn

packages/testing/src/fen/testing/pty.fnl:107

fen.testing.pty.read-until

packages/testing/src/fen/testing/pty.fnl:107

fen.testing.pty.drain

packages/testing/src/fen/testing/pty.fnl:107

fen.testing.pty.now

packages/testing/src/fen/testing/pty.fnl:107

fen.testing.pty.artifact-dir

packages/testing/src/fen/testing/pty.fnl:107

fen.testing.pty.ensure-dir

packages/testing/src/fen/testing/pty.fnl:107

fen.testing.pty.write-file

packages/testing/src/fen/testing/pty.fnl:107

fen.testing.pty.append-file

packages/testing/src/fen/testing/pty.fnl:107

fen.testing.pty.encode-json

packages/testing/src/fen/testing/pty.fnl:107

fen.testing.pty.cast-start

packages/testing/src/fen/testing/pty.fnl:107

fen.testing.pty.cast-event

packages/testing/src/fen/testing/pty.fnl:107

fen.testing.tui

Module neighborhood graph: DOT · SVG

fen.testing.tui module graph

fen.testing.tui.install-termbox-stub!

[]

packages/testing/src/fen/testing/tui.fnl:7

fen.testing.tui.install-markdown-stub!

[]

packages/testing/src/fen/testing/tui.fnl:52

fen.testing.tui.reset-state!

[?opts]

packages/testing/src/fen/testing/tui.fnl:59

Other (miscellaneous top-level modules)

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:123

fen.provider_help.render-provider

[name]

packages/fen/src/fen/provider_help.fnl:150

fen.provider_help.known-provider?

[name]

packages/fen/src/fen/provider_help.fnl:157

fen.provider_help.dispatch

[argv]

packages/fen/src/fen/provider_help.fnl:160

fen.provider_help.missing-provider-message

[provider-name key-var ?source]

packages/fen/src/fen/provider_help.fnl:173

fen.provider_help.unknown-provider-message

[provider-name]

packages/fen/src/fen/provider_help.fnl:198

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:41

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:48

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:55

fen.script_runner.build-arg-table

(build-arg-table argv script-index) -> table

Build a Lua-compatible global arg table for a script selected from fen's original argv.

tags: cli, scripts, compatibility

packages/fen/src/fen/script_runner.fnl:64

fen.script_runner.build-eval-arg-table

(build-eval-arg-table argv code-index) -> table

Build a Lua-compatible global arg table for inline eval code.

tags: cli, scripts, eval, compatibility

packages/fen/src/fen/script_runner.fnl:80

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:100

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:139

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:216

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:240

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:27

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:48

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:230

fen.update.arch-

packages/fen/src/fen/update.fnl:251

fen.update.expected-hash

packages/fen/src/fen/update.fnl:252

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:46

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:54

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:62