# Worker internal prompts (builtin pack).
#
# Values are minijinja template strings. Use `{% include "$prefix/..." %}`
# to pull in long text from the $yoi / $user / $workspace prompt
# libraries.
#
# Every key here MUST correspond to a `WorkerPrompt` variant; missing or
# extra keys cause a build-time error (see `crates/worker/build.rs`).

[prompt]
compact_system = "{% include \"$yoi/internal/compact_system\" %}"

memory_extract_system = "{% include \"$yoi/internal/memory_extract_system\" %}"

memory_consolidation_system = "{% include \"$yoi/internal/memory_consolidation_system\" %}"

notify_wrapper = """\
[Notification]
{{ message }}

This is a notification, not a blocking request. If you are in the middle of a task, continue your current work and address this at a natural stopping point.\
"""

interrupt_tool_result_summary = "[Interrupted by user]"

interrupt_system_note = "[The previous turn was interrupted by the user. The user's next request follows.]"

working_boundaries_section = """\
---
## Working boundaries

{{ scope_summary }}\
"""

agents_md_section = """\
---
## Project instructions (AGENTS.md)

{{ agents_md }}\
"""

resident_memory_summary_section = """\
---
## Resident memory summary

The following is the current durable session/workspace summary. Treat it as background context; it is not a user request.

{{ summary }}\
"""

resident_knowledge_section = """\
---
## Resident knowledge

The following knowledge records are advertised resident.{% if knowledge_query_available and memory_read_available %} Use the KnowledgeQuery / MemoryRead tools to fetch the full body when relevant.{% elif knowledge_query_available %} Use KnowledgeQuery to search related knowledge records when relevant.{% elif memory_read_available %} Use MemoryRead on a known knowledge slug when the full body is required.{% endif %}

{{ entries }}\
"""

resident_workflows_section = """\
---
## Resident workflows

The following workflows are advertised resident. When a user request matches one, follow its procedure as authoritative instead of improvising. User-invocable workflows can additionally be triggered by the user typing /<slug>; you cannot invoke any of them yourself.

{{ entries }}\
"""

worker_orchestration_guidance_section = "{% include \"$yoi/common/worker-orchestration\" %}"

ticket_event_companion_notice = "{% include \"$yoi/worker/ticket_event_companion_notice\" %}"

spawn_worker_tool_description = """\
Spawn a new Worker process to work on a delegated task. The spawner's write scope is reduced by the scope passed here; the spawned Worker receives its own socket and starts running `task` immediately. The spawned Worker outlives the spawner's current turn and can be contacted again through its socket path.

Optional `cwd`: when provided, it is the child process/tool default working directory only. It must be an absolute existing directory covered by the child's delegated readable scope, and it does not change workspace/Profile/memory/Ticket roots or grant authority.

Profile selection: `profile` may be omitted or set to `default` to use the effective child default profile, set to `inherit` to derive reusable child configuration from this Worker, or set to one of the registry selectors below. Raw/path profile selectors are not accepted by SpawnWorker. `scope` is always the only delegated filesystem capability; profile scope is replaced by the explicit SpawnWorker scope.

Default profile: {{ default_profile }}
Special selector: inherit — derive reusable model/worker/tool policy from the spawner while replacing worker.name and scope.
Available registry profiles:
{{ available_profiles }}{% if profile_diagnostic %}

Profile discovery diagnostic: {{ profile_diagnostic }}{% endif %}\
"""
