Conversation
…an example of every field from the catalogue (LOOP S-07); 0.0.18
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
The generated reference omits examples for nine top-level fields despite promising an example for every field.
Review effort: Balanced
Findings: 2
Open (2)
What changed in this PR
Adds a generated Appspec reference for release 0.0.18.
Changes:
- Generates Markdown documentation from the Appspec schema and catalogue.
- Updates the generation command and synchronization tests.
- Adds generated documentation and release notes.
| File | Description |
|---|---|
agentspecs/apps/reference.py |
Implements reference generation. |
agentspecs/apps/__main__.py |
Writes the generated reference. |
docs/docs/apps/reference.md |
Adds generated Appspec documentation. |
tests/test_apps.py |
Tests reference coverage and synchronization. |
agentspecs/__version__.py |
Bumps the version to 0.0.18. |
CHANGELOG.md |
Documents the release. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| for application in APP_CATALOGUE.values(): | ||
| for key, value in dump_app(application).items(): | ||
| examples.setdefault(key, value) |
There was a problem hiding this comment.
Fixed in 968443b: examples come from the catalogue's YAML files merged field by field (not dump_app, which leaves out defaults), and the eight fields no application sets — team, model, skills, tools, permissions, checks, avatar, banner — take one of EXTRA_EXAMPLES. The page now has an example for all 34 fields.
| for name in schema["properties"]: | ||
| assert f"| `{name}`" in page, name | ||
| for name, spec in schema["$defs"].items(): | ||
| assert name in page, name | ||
| # Every example comes from an application the spec reads. | ||
| assert "### `connections`" in page and "### `rules`" in page |
There was a problem hiding this comment.
Fixed in 968443b: the test requires an example heading for every top-level property, and reads each of EXTRA_EXAMPLES into an application of the catalogue with parse_app, so an example the spec would refuse fails the test.
…atalogue's files, not their dumps, and for the rest examples the spec is tested to accept
…s as a JSON Schema; an Appspec's components and surface checked against it (LOOP C-13); 0.0.19
…og by its names, Datalayer's own as its custom catalog — not a place of its own (LOOP C-13)
…e Bluesky icon its own; pydantic-ai extra at 1.94 or later
…e, the landing's templates as Appspecs (LOOP E-01); the assistant embed mode (D-07) and interface.assistant, the character of the floating assistant (T-24); 0.0.20
…y that name, the fields of a component, how a surface names one and app_problems refusing an unknown one, the generated lookups; the catalog's page generated from ui-plugins/*.yaml by python -m agentspecs.ui_plugins (each plugin, its components, Datalayer's own with their properties as JSON Schema, bindings, events and example), and a test that keeps it in step (LOOP G-05)
…get's page publishes — ChoicePicker options as {label, value}, seats, plan and term as its settings at /inputs/<id>, its answer at /output and where it stands at /status; a test validates every catalogue surface's basic components against A2UI v0.9's basic catalog and its inputs against its settings (LOOP R-01, C-04); 0.0.21
…on the Canvas, its page bound to a chat's question and answer), Customer interview and Report from a file (written in Python, apps/<id>/app.py, their specs built by loop apps build), Weekly pipeline report (a worker under the Guards, Gates and Track of op-sales-pipeline-board-report, asking before it sends); each says what was verified and what was not; tests for the eleven (LOOP E-01, E-02, E-14); 0.0.22
…osed_by takes canvas, a page composed by a person on the Canvas, and Support desk says it (it said developer, as the Python examples do); a test keeps Support desk the one Canvas example, without an app.py (LOOP E-05); 0.0.23
…rsation alone and its page composed on the Canvas was not shown; app_problems says a page composed for a chat layout, in agent-runtimes' surfaceUnshown sentence; dump_app writes a rule on one class of action alone (applies_to: send), as the TypeScript writer does, and Customer interview and Report from a file are rebuilt so (LOOP R-01, E-01); 0.0.24
… may be switched to beside its model — catalogue ids of chat models, not its own, listed once; the four enabled agents list alibaba:qwen-max, with their own Sonnet 4.6 the chat models datalayer-ai-inference serves from the catalogue; tested and documented with the agent fields; 0.0.25
…0.0.24 carries and links their pages, with the missing 0.0.19 entry (LOOP G-09)
…ling the build (LOOP G-10)
… judge is decider, a decision's judgment_model is decision_model, Jev is asked at ai-inference's POST /decisions; the decide tool (action read) asks Jev typed questions — noul, choice, score — through ai-inference with the runtime's token, and A Simple Agent lists it, says so and suggests three decisions; the Appspec schema written again; 0.0.26
…versations may be used to suggest tests, off unless said; said on the Applications page and in the changelog
…its own (LOOP U-31, U-32) — frames_with_organization gives the catalogue as an organization reads it for compose_frames: its rules, terminology and style in place of a Frame's three as resolved, and its own org-… Frames with a name and a description; the catalogue refuses an org- id; app_problems checks an org-… context against the organization's Frames, and refuses it when no organization is said; 0.0.28
…ateway's own table (LOOP I-12, F-10) — what an application's connection to Datalayer reaches through the gateway, by level; 0.0.29
…s.verified (AppVerified: live, recorded, unverified, each a sentence; empty unless said), said by the eleven examples in place of their header comments, the schema and the reference written again; Report from a File takes its CSV on its page (LOOP E-01): a File upload at /files, the file going to its session with the run; 0.0.30
…rver, skill, tool and frontend tool set; an Odoo accounting server through the Datalayer MCP server — agentspecs.marks (MARKS_SCHEMA, icon_problem, emoji_problem, marks_problems, parse_icon): an icon is <package>:<kebab-case name>, the package @datalayer/icons-react or @primer/octicons-react (@datalayer/icons-react:odoo, @primer/octicons-react:mark-github), a bare name refused; the 47 entries say theirs (brands from the Datalayer icons, the rest octicons; notebook and brain, never octicons, gone). odoo-accounting: the datalayer server at mcp?only=odoo-accounting, its 49 tools classed as datalayer classes them, off by default. Tools are the runtime's, frontend-tools the page's: said in the README and the Tools page; tests/test_marks.py; 0.0.31
…n agent, not a Cog; what it suggests you ask; Datalayer's own tests; 0.0.32
…4) — the past orders, a run already recorded, nothing has stopped for an approval, measured for it; 0.0.33
…egies (StrategySpec, StrategyHuman, StrategyTermination, STRATEGY_CATALOGUE, Strategies, get_strategy, list_strategies), the same four ids, no alias for agentspecs.loops; README and the teams docstring; tests/test_strategies.py; 0.0.34
… the decide tool (yes or no, a choice, a score, each with its confidence); its instructions, its decision starters, and its one rule: deciding is a read, done without asking; the reference's tools example is its own; 0.0.35
…tools, and the field that names them backend_tools — agentspecs/tools moved to agentspecs/backend-tools (all nineteen run on the runtime, in Python; none moved to frontend-tools); backend_tools on agents (146), applications (AppSpec, Decide), Frames (FrameSpec, FrameContext) and in composition; no alias: tools refused by resolve_spec, FrameSpec and the Appspec; actions, the rules' tool lookup and the marks read backend-tools; a team member's tools unchanged; the Appspec schema and reference written again, the docs page agents/backend-tools; 0.0.36
…eam over A2A — sales (chat, in the browser: asks Accounting with ask_accounting and hands over what it answered, never a figure of its own; the paper clip) and accounting (chat, on a runtime: odoo-accounting at Can read in its owner's name, Read the books done alone, Change the books asked first, never writes to Odoo; the wizard); a team member may be an application (app, not with ref), say where its loop turns (runs_in: browser or runtime) and whom it asks (talks_to: {member, over: a2a}), a team says its entry and a supervisor may be an application; links and the entry checked at load; TeamSpec.referenced_apps(); the team sales-and-accounting; docs: Teams of applications, members, execution; the Appspec reference written again; 0.0.37
…s agent-runtimes writes it, named for the application (accounting)
…s/voices (kokoro-af-heart en-US, kokoro-bf-emma en-GB, kokoro-ff-siwis fr-FR with the SIWIS attribution) and agentspecs/speech-models (moonshine-tiny-en, moonshine-base-en and whisper-base for the browser, silero-vad, kokoro-82m for ai-agents), every file pinned by SHA-256 and size; the licence register agentspecs/speech-licences.yaml (allowed, server_only, every library, model, voice and dataset weighed; not yet reviewed by counsel); agentspecs.speech refuses at load a voice or a model whose weights, data or code the register does not allow (VO-04), transcriber_for, voice_problems; the Appspec's interface.voice (enabled, input, output, voice, language, where; VO-41) and the audio record item, kept only by an application that listens and never by a public one (VO-42); schema and reference written again; test_speech.py; 0.0.38
…ixtures it heard better than base (WER 3.3% against 4.9%) at half the download (VOICE.md VO-05); 0.0.39
…e and the register; 0.0.40
…pplication's answers come in, words first — a media type the outputs catalogue gives, named once (output_media_types); Accounting answers in Markdown and a Jupyter notebook (LOOP H-29); 0.0.41
…stant's balloon shows the conversation — history (every message, the composer last) or current (only what it says or does now: the answer being written, or the tool it calls); the page's own when unsaid (LOOP T-23); 0.0.42

The open PR for agentspecs' LOOP work, pushed to as it goes; released by tagging the branch head when green.
python -m agentspecs.appswrites it to docs/docs/apps/reference.md; a test keeps it in step.