docs: unwrap hard-wrapped Markdown to one line per paragraph

Hard line breaks mid-paragraph make docs harder to edit and diff — a
one-word change reflows and re-diffs the whole paragraph. Reflow all
tracked non-vendor Markdown (plus vendor/AGENTS.md) so each prose
paragraph is a single line; soft-wrapping is the editor's job. Fenced
code, tables, and list structure are preserved (wrapped list items fold
to one line per bullet). Documents the convention in AGENTS.md.
This commit is contained in:
Tianyi Cui
2026-06-13 18:39:20 +08:00
parent e98c1c5d42
commit 066f94c7e0
39 changed files with 348 additions and 1206 deletions

View File

@@ -1,19 +1,14 @@
# dsh-system-prompt
System prompt assembly registry. Plugins contribute ordered text sections and
tool-schema providers; the agent loop calls `assemble()` once per step.
System prompt assembly registry. Plugins contribute ordered text sections and tool-schema providers; the agent loop calls `assemble()` once per step.
## Service: `SystemPrompt` (ctx key: `systemPrompt`)
### Public API
- `ctx.systemPrompt.section(section: PromptSection): () => void`
Contribute a section. Disposed with the calling fiber.
- `ctx.systemPrompt.tools(provider: () => ToolSchema[]): () => void`
Contribute tool schemas (evaluated at each assembly). Disposed with the calling
fiber.
- `ctx.systemPrompt.assemble(): Promise<PromptAssembly>`
Assemble the current prompt. Runs through the `system-prompt/assemble` waterfall.
- `ctx.systemPrompt.section(section: PromptSection): () => void` Contribute a section. Disposed with the calling fiber.
- `ctx.systemPrompt.tools(provider: () => ToolSchema[]): () => void` Contribute tool schemas (evaluated at each assembly). Disposed with the calling fiber.
- `ctx.systemPrompt.assemble(): Promise<PromptAssembly>` Assemble the current prompt. Runs through the `system-prompt/assemble` waterfall.
### Events
@@ -24,24 +19,17 @@ tool-schema providers; the agent loop calls `assemble()` once per step.
### Key types
- `PromptSection` — `{ name, order, text: string | (() => string) }`. Sections
are concatenated in ascending `order`.
- `PromptAssembly` — `{ sections: PromptSection[], tools: ToolSchema[] }`.
Tool schemas are part of the assembly by design: "what the model is told it
can do" is one coherent thing, even though adapters transmit schemas as a
separate wire field.
- `PromptSection` — `{ name, order, text: string | (() => string) }`. Sections are concatenated in ascending `order`.
- `PromptAssembly` — `{ sections: PromptSection[], tools: ToolSchema[] }`. Tool schemas are part of the assembly by design: "what the model is told it can do" is one coherent thing, even though adapters transmit schemas as a separate wire field.
- `renderPrompt(assembly)` — joins section texts with blank lines.
Merge-extensible: plugins can declare extra fields on `PromptAssembly` via
declaration merging.
Merge-extensible: plugins can declare extra fields on `PromptAssembly` via declaration merging.
### Extension points
- Section providers: AGENTS.md reader, cwd notifier, persona config, etc.
- Tool schema providers: `ToolRegistry` registers itself as a tool provider
automatically.
- The `system-prompt/assemble` waterfall: mutate or replace the assembly
(system-prompt configurability, dynamic tool filtering).
- Tool schema providers: `ToolRegistry` registers itself as a tool provider automatically.
- The `system-prompt/assemble` waterfall: mutate or replace the assembly (system-prompt configurability, dynamic tool filtering).
### What is NOT here