|
|
@@ -459,8 +459,8 @@ export const SERVICE_API: readonly ServiceApiEntry[] = [
|
|
|
},
|
|
|
{
|
|
|
key: 'clientModules',
|
|
|
- summary: 'The web plugin table service: incremental `dsh.client` scan + wire composition + bundle route + index tap.',
|
|
|
- description: 'The web plugin table service: incremental `dsh.client` scan + wire composition + bundle route + index tap. Construction runs the activation scan synchronously — a malformed declaration or missing bundle among the already-loaded entries aggregates into one loud throw (FAILED fiber; the boot activation audit reports it).',
|
|
|
+ summary: 'The web plugin table service: incremental `dsh.client` scan + wire composition + bundle route + index injection rows.',
|
|
|
+ description: 'The web plugin table service: incremental `dsh.client` scan + wire composition + bundle route + index injection rows. Construction runs the activation scan synchronously — a malformed declaration or missing bundle among the already-loaded entries aggregates into one loud throw (FAILED fiber; the boot activation audit reports it).',
|
|
|
methods: [
|
|
|
{
|
|
|
signature: 'graph(): WebBootGraph',
|
|
|
@@ -2217,6 +2217,18 @@ export const SERVICE_API: readonly ServiceApiEntry[] = [
|
|
|
parameters: [{ name: 'html', description: 'the raw index.html body.' }],
|
|
|
returns: 'the transformed body.',
|
|
|
},
|
|
|
+ {
|
|
|
+ signature: 'collectIndexInjections(): IndexInjection[]',
|
|
|
+ description: 'Gather the structured injection table: one `webserver/index-inject` emit, every subscriber pushes its current rows. Fresh per call, so subscribers read live state (module graph, theme preference) at emit time.',
|
|
|
+ parameters: [],
|
|
|
+ returns: 'rows in subscriber activation order.',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ signature: 'renderIndex(html: string): string',
|
|
|
+ description: 'Render one index.html body: the structured injection table first, then the raw `tapIndex` transforms over the result.',
|
|
|
+ parameters: [{ name: 'html', description: 'the raw index.html body.' }],
|
|
|
+ returns: 'the transformed body.',
|
|
|
+ },
|
|
|
],
|
|
|
},
|
|
|
{
|
|
|
@@ -2685,6 +2697,14 @@ export const EVENT_API: readonly EventApiEntry[] = [
|
|
|
description: 'Observe the frozen, lossless-JSON final outcome. Listener failures are contained. Scope-filtered dispatch (`@deepseek-ai/dsh-scope`): keyed by `exec.agent`.',
|
|
|
parameters: [{ name: 'exec', description: 'the execution object that traversed the pipeline.' }, { name: 'result', description: 'a deep-frozen snapshot of the final returned result.' }],
|
|
|
},
|
|
|
+ {
|
|
|
+ name: 'webserver/index-inject',
|
|
|
+ mode: 'emit',
|
|
|
+ signature: '\'webserver/index-inject\'(table: IndexInjection[]): void',
|
|
|
+ summary: 'Collect the structured index injection table.',
|
|
|
+ description: 'Collect the structured index injection table. Emitted on every index render and every worker boot-payload request; listeners push their current rows, so a row\'s data is read fresh at emit time.',
|
|
|
+ parameters: [{ name: 'table', description: 'Mutable row table; listeners append in activation order.' }],
|
|
|
+ },
|
|
|
{
|
|
|
name: 'workflow/agent-end',
|
|
|
mode: 'emit',
|
|
|
@@ -3297,6 +3317,14 @@ export const TYPE_API: readonly TypeApiEntry[] = [
|
|
|
name: 'InboxTarget',
|
|
|
declaration: 'export type InboxTarget = \'next-turn\' | \'next-step\';',
|
|
|
},
|
|
|
+ {
|
|
|
+ name: 'IndexInjection',
|
|
|
+ declaration: 'export type IndexInjection = {\n kind: \'global\';\n name: string;\n value: unknown;\n} | {\n kind: \'script\';\n placement: IndexInjectionPlacement;\n text: string;\n} | {\n kind: \'script-src\';\n placement: IndexInjectionPlacement;\n src: string;\n} | {\n kind: \'style\';\n text: string;\n} | {\n kind: \'html\';\n placement: IndexInjectionPlacement;\n html: string;\n};',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: 'IndexInjectionPlacement',
|
|
|
+ declaration: 'export type IndexInjectionPlacement = \'head\' | \'body\';',
|
|
|
+ },
|
|
|
{
|
|
|
name: 'InvariantFailure',
|
|
|
declaration: 'export type InvariantFailure = (message: string) => never;',
|