Commit Graph

6 Commits

Author SHA1 Message Date
6acab34149 fix 2026-06-10 18:12:43 +08:00
ba8ddff696 feat(api): composer slash validations — human must be referenced + knowledge placeholder — ENG-617
Hard rule (PRD: human involvement must be slash-referenced or save errors):
every configured human contact must appear as {{#human:<id>#}} in its surface's
prompt (matched via any identity alias: id/contact_id/human_id/email/name;
identity-less contacts are skipped). Error code human_involvement_not_referenced,
enforced on both the agent soul prompt and the workflow job prompt.

Soft findings (never block save), returned by validate and attached to save
responses as `validation`:
- knowledge_retrieval_placeholder: dangling {{#knowledge:<id>#}} mentions (not
  in config, or configured-but-deleted in DB) are kept with a placeholder name
  (mention label, fallback "Knowledge <id8>") per the 0522 consensus, instead of
  being dropped or rejected; knowledge not referenced is fine.
- mention_target_missing: skill/file/tool/cli_tool/human/node_output/output
  mentions whose id resolves to no configured item.
- mention_malformed: mention-shaped markers the strict grammar rejects
  (degraded to plain text at runtime by the scrub pass).

Response models gain warnings/knowledge_retrieval_placeholder (validate) and
validation (save); validate endpoints now resolve dataset existence via the
tenant-scoped dataset lookup.

Design: Confluence 490012681 §5. Depends on the ENG-616 mention contract.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 14:51:31 +08:00
3044c732af feat(api): real slash-menu candidates data sources — ENG-615
The agent-composer candidates endpoints returned hardcoded empty arrays; node_id
and tenant were ignored. Now:

- workflow variant: previous_node_outputs computed from the draft workflow graph
  (WorkflowGraphTopology extracted from agent_v2 validators into
  core/workflow/graph_topology.py + new upstream_node_ids BFS). Output
  enumeration matches the Node Output Inspector: start variables + recorded
  sys.* are static, Agent v2 upstream nodes use their binding's effective
  declared outputs, all other kinds infer from the latest draft-run variables
  (inferred: true). Entries are emitted in the stored
  WorkflowPreviousNodeOutputRef shape (selector/node_id/output/name + display
  extras) so a selected candidate writes back into the config verbatim.
  human_contacts = the binding's configured node_job items (0522: defined only).
- soul variant (both variants): skills_files / cli_tools(enabled) /
  knowledge_datasets (enriched via DatasetService, dangling marked missing for
  the placeholder UX) / human_contacts from the agent's current soul config;
  dify_tools from BuiltinToolManageService.list_builtin_tools (same source as
  the tool selector; daemon outage degrades to an empty list, never a 500).
- per-list cap 200 + response-level truncated flag; all queries tenant-scoped;
  empty config returns empty lists.
- controllers pass tenant_id/user_id/node_id (with_current_tenant_id +
  with_current_user_id).

Design: Confluence 490012681 §3.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 14:19:13 +08:00
yyh
f9320b2c91 fix(api): return agent timestamps as epoch seconds (#37057)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-06-04 08:27:37 +00:00
yyh
2d6c9300e3 fix(api): tighten agent v2 generated contracts (#36989)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-06-03 06:52:40 +00:00
2cc567c6a3 feat: add DTO for agent api (#36797)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-05-29 03:36:41 +00:00