Skip to content
AdStack Engineering Docs
Esc
navigateopen⌘Jpreview
On this page

What is actually wired up

The audit of which modules have a live entry point, and which are code the app can no longer reach.

A module existing in lib/registry.ts and having a prompt in the database does not mean a user can reach it. The app moved to a chat-first model where every capability is an agent triggered from conversation, and the older per-feature pages were left behind rather than deleted.

This page records the state as audited on 2026-07-30. Re-run the check before trusting it.

How to re-audit

Three questions, in order:

  1. Is the module in AGENT_DEFINITIONS? If yes, the host can call it as a tool and it is live.
  2. If not, does application code reference MODULES["<slug>"].id? Internal helpers (attachment summarizer, character map, cast list, shared guidelines, image prompt engine, storyboard frames, talking-head engine) live here.
  3. If neither, is there a route or component that calls it? And is that route reachable from navigation, or only by typing the URL?
grep -rn 'MODULES\["<slug>"\]' --include='*.ts' --include='*.tsx' lib src

Live

23 agent definitions are callable by the host as tools. Two of them (campaign-builder, storyboard-director) are in EXCLUDED_SLUGS, meaning they are not exposed as ordinary tools but are reached through their own flows: start_campaign and create_storyboard.

Internal helpers with live callers, not user-facing agents and correctly absent from the tool list:

Module Called by
image-prompt-engine every image path: chat, Creative Studio, character portraits
storyboard-frames the pipeline, for Route A scene frames
talking-head-video-prompt-engine the talking-head engine, three callers
character-map-prompt-engine the character map build
cast-list propose_cast_list
attachment-summarizer lib/attachment-summarizer.ts
shared-guidelines lib/chat-v2/agent-runner.ts, prepended to every agent run
campaign-visual-recommender the campaign chat’s visual category picker
host the chat loop itself

Not reachable

Nothing, as of this audit. Two modules were on this list and both are resolved:

  • viral-shorts is a host tool now. It was a good agent for organic short-form copy and the only thing wrong with it was the missing door.
  • bulk-creatives was removed, and then its row came back as something better. The row was never deleted (a deleted prompt is unrecoverable and history is cheap), and static-ad-director now reuses its module id deliberately, because everything looks modules up by id and reviving the row kept its prompt history intact. The slug rename cost nothing.

The is_active trap

cast-list and attachment-summarizer both sat at is_active = false while being called on every run of their flow. They kept working, because the runtime prompt lookup filters on is_default only and never reads is_active.

Both flags are corrected, and the internal engines now share one utility category instead of eight one-off values. Fixing the data rather than the lookup is deliberate: making the runtime honour is_active would turn a mislabelled row into an outage.

Orphaned pages

src/routes/_app/tools/ holds ten pages from before the chat-first architecture: ad hooks, advertorial, copy analyzer, FB ads, headline master, mini VSL, pain points, viral shorts, who’s my buyer.

Only one is linked from anywhere in the app: /tools/whos-my-buyer, from the dashboard onboarding steps. The rest are reachable only by typing the URL.

The lesson from viral-shorts: an orphaned page is worth checking against the agent behind it before deleting either. The page was disposable, the agent was not.

This is duplication rather than loss: every one of those agents is a live host tool, and chat is the intended way in.

The campaign pages (/campaigns, /campaigns/$campaignId) are also absent from the sidebar, but they are not orphaned: the host’s start_campaign tool navigates into them.

Last updated on August 6, 2026

Was this page helpful?