changedInput schema / anyOf
Previous value: -[
- {
- "additionalProperties": false,
- "description": "action=\"add_component\": Create a new component under `parent_id` (or at root if null). Components are STRUCTURAL hubs — knowledge and tasks attach to them. Before calling, run list(what=\"components\") and confirm a similar one doesn't already exist.",
- "properties": {
- "action": {
- "const": "add_component",
- "type": "string"
- },
- "body": {
- "description": "(add_component only) 1-3 paragraph charter (markdown).",
- "type": "string"
- },
- "name": {
- "description": "REQUIRED for add_component — short noun-phrase title.",
- "maxLength": 200,
- "minLength": 1,
- "type": "string"
- },
- "parent_id": {
- "anyOf": [
- {
- "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "REQUIRED for add_component — parent component shareable id, or null for a root-level component."
- },
- "privacy_bypass": {
- "description": "true writes despite a privacy flag. Only meaningful after a flag; the user decides whether the content can be written.",
- "type": "boolean"
- },
- "privacy_false_positive": {
- "description": "With privacy_bypass: true reports the privacy flag as wrong.",
- "type": "boolean"
- },
- "privacy_judgement_id": {
- "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
- "type": "string"
- },
- "privacy_note": {
- "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
- "maxLength": 500,
- "type": "string"
- },
- "project_slug": {
- "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "action",
- "project_slug",
- "parent_id",
- "name"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "action=\"rename_topic\": Rename a topic across every knowledge AND task node in the active project, in one transactional update (deduped if a node already had `to`). For typos and casing fixes; for multi-source consolidations use destructive(action=\"merge_topics\"). Members-only.",
- "properties": {
- "action": {
- "const": "rename_topic",
- "type": "string"
- },
- "from": {
- "description": "REQUIRED for rename_topic — topic to replace. Must be non-empty.",
- "minLength": 1,
- "type": "string"
- },
- "project_slug": {
- "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
- "minLength": 1,
- "type": "string"
- },
- "to": {
- "description": "REQUIRED for rename_topic — replacement topic. Must be non-empty.",
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "action",
- "project_slug",
- "from",
- "to"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "action=\"feedback\": Submit a short, structured reflection on how well Stele helped during a session: one strength, one hindrance, a 0–10 anchored score, and one sentence on what to improve. Keep every field about Stele itself — never include project, code, or customer detail. Both agents (reflecting on their own session) and people (their own feedback) submit through this; set `source` to distinguish them. All fields are optional, but the score is the most useful — it's the trend signal.",
- "properties": {
- "action": {
- "const": "feedback",
- "type": "string"
- },
- "hindrance": {
- "description": "(feedback only) One place Stele was more friction than help.",
- "type": "string"
- },
- "improvement": {
- "description": "(feedback only) One sentence on what would make Stele better — about Stele only, no project or code detail.",
- "type": "string"
- },
- "project_slug": {
- "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
- "minLength": 1,
- "type": "string"
- },
- "score": {
- "description": "(feedback only) 0–10: how much Stele helped this session. Anchored — 0 = fought you all session · 5 = neutral, no effect · 10 = changed the outcome.",
- "maximum": 10,
- "minimum": 0,
- "type": "integer"
- },
- "session_id": {
- "description": "(feedback only) The session being reflected on. Defaults to the current session.",
- "type": "string"
- },
- "source": {
- "description": "(feedback only) Who is giving this feedback: the agent reflecting on its own session ('agent', the default), or a person giving their own ('human').",
- "enum": [
- "agent",
- "human"
- ],
- "type": "string"
- },
- "strength": {
- "description": "(feedback only) One concrete way Stele helped this session.",
- "type": "string"
- }
- },
- "required": [
- "action",
- "project_slug"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "action=\"pause_rag\": Suspend automatic topic recall for a bounded number of upcoming prompts, then let it resume on its own. Use it inside a planning or review loop where you already have what you need. Your focus survives the pause — this is a mute, not a reset. There is no separate resume control: call it again with turns 0 to clear a pause early. Pausing is per-session, so a parallel session in the same repo is unaffected.",
- "properties": {
- "action": {
- "const": "pause_rag",
- "type": "string"
- },
- "reason": {
- "description": "REQUIRED for pause_rag — short reason for the pause, shown to the user in the countdown line.",
- "type": "string"
- },
- "recall_session": {
- "description": "REQUIRED for every recall control (activate_recall, deactivate_recall, pause_rag, recall_status) — the recall session handle from the awaiting-focus notice in this conversation. It identifies which local session to update and grants no access on its own.",
- "minLength": 1,
- "type": "string"
- },
- "turns": {
- "description": "REQUIRED for pause_rag — number of upcoming prompts to skip automatic topic recall for. Must be >= 0. 0 clears an active pause immediately. No default.",
- "minimum": 0,
- "type": "integer"
- }
- },
- "required": [
- "action",
- "recall_session",
- "reason",
- "turns"
- ],
- "type": "object"
- }
-]New value: +[
+ {
+ "additionalProperties": false,
+ "description": "action=\"add_component\": Create a new component under `parent_id` (or at root if null). Components are STRUCTURAL hubs — knowledge and tasks attach to them. Before calling, run list(what=\"components\") and confirm a similar one doesn't already exist.",
+ "properties": {
+ "action": {
+ "const": "add_component",
+ "type": "string"
+ },
+ "body": {
+ "description": "(add_component only) 1-3 paragraph charter (markdown).",
+ "type": "string"
+ },
+ "name": {
+ "description": "REQUIRED for add_component — short noun-phrase title.",
+ "maxLength": 200,
+ "minLength": 1,
+ "type": "string"
+ },
+ "parent_id": {
+ "anyOf": [
+ {
+ "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "REQUIRED for add_component — parent component shareable id, or null for a root-level component."
+ },
+ "privacy_bypass": {
+ "description": "true writes despite a privacy flag. Only meaningful after a flag; the user decides whether the content can be written.",
+ "type": "boolean"
+ },
+ "privacy_false_positive": {
+ "description": "With privacy_bypass: true reports the privacy flag as wrong.",
+ "type": "boolean"
+ },
+ "privacy_judgement_id": {
+ "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
+ "type": "string"
+ },
+ "privacy_note": {
+ "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
+ "maxLength": 500,
+ "type": "string"
+ },
+ "project_slug": {
+ "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "action",
+ "project_slug",
+ "parent_id",
+ "name"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "action=\"rename_topic\": Rename a topic across every knowledge AND task node in the active project, in one transactional update (deduped if a node already had `to`). For typos and casing fixes; for multi-source consolidations use destructive(action=\"merge_topics\"). Members-only.",
+ "properties": {
+ "action": {
+ "const": "rename_topic",
+ "type": "string"
+ },
+ "from": {
+ "description": "REQUIRED for rename_topic — topic to replace. Must be non-empty.",
+ "minLength": 1,
+ "type": "string"
+ },
+ "project_slug": {
+ "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
+ "minLength": 1,
+ "type": "string"
+ },
+ "to": {
+ "description": "REQUIRED for rename_topic — replacement topic. Must be non-empty.",
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "action",
+ "project_slug",
+ "from",
+ "to"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "action=\"feedback\": Submit a short, structured reflection on how well Stele helped during a session: one strength, one hindrance, a 0–10 anchored score, and one sentence on what to improve. Keep every field about Stele itself — never include project, code, or customer detail. Both agents (reflecting on their own session) and people (their own feedback) submit through this; set `source` to distinguish them. All fields are optional, but the score is the most useful — it's the trend signal.",
+ "properties": {
+ "action": {
+ "const": "feedback",
+ "type": "string"
+ },
+ "hindrance": {
+ "description": "(feedback only) One place Stele was more friction than help.",
+ "type": "string"
+ },
+ "improvement": {
+ "description": "(feedback only) One sentence on what would make Stele better — about Stele only, no project or code detail.",
+ "type": "string"
+ },
+ "project_slug": {
+ "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
+ "minLength": 1,
+ "type": "string"
+ },
+ "score": {
+ "description": "(feedback only) 0–10: how much Stele helped this session. Anchored — 0 = fought you all session · 5 = neutral, no effect · 10 = changed the outcome.",
+ "maximum": 10,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "session_id": {
+ "description": "(feedback only) The session being reflected on. Defaults to the current session.",
+ "type": "string"
+ },
+ "source": {
+ "description": "(feedback only) Who is giving this feedback: the agent reflecting on its own session ('agent', the default), or a person giving their own ('human').",
+ "enum": [
+ "agent",
+ "human"
+ ],
+ "type": "string"
+ },
+ "strength": {
+ "description": "(feedback only) One concrete way Stele helped this session.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "action",
+ "project_slug"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "action=\"pause_rag\": Suspend automatic topic recall for a bounded number of upcoming prompts, then let it resume on its own. Use it inside a planning or review loop where you already have what you need. Your focus survives the pause — this is a mute, not a reset. There is no separate resume control: call it again with turns 0 to clear a pause early. Pausing is per-session, so a parallel session in the same repo is unaffected.",
+ "properties": {
+ "action": {
+ "const": "pause_rag",
+ "type": "string"
+ },
+ "reason": {
+ "description": "REQUIRED for pause_rag — short reason for the pause, shown to the user in the countdown line.",
+ "type": "string"
+ },
+ "recall_session": {
+ "description": "REQUIRED for every recall control (activate_recall, deactivate_recall, pause_rag, recall_status) — the recall session handle Stele printed in this conversation, in its recall note or notice. It identifies which local session to update and grants no access on its own.",
+ "minLength": 1,
+ "type": "string"
+ },
+ "turns": {
+ "description": "REQUIRED for pause_rag — number of upcoming prompts to skip automatic topic recall for. Must be >= 0. 0 clears an active pause immediately. No default.",
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "action",
+ "recall_session",
+ "reason",
+ "turns"
+ ],
+ "type": "object"
+ }
+]