@rubytech/create-realagent-code 0.1.30 → 0.1.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/persistent-components/dist/index.d.ts +11 -12
  3. package/payload/platform/lib/persistent-components/dist/index.d.ts.map +1 -1
  4. package/payload/platform/lib/persistent-components/dist/index.js +11 -12
  5. package/payload/platform/lib/persistent-components/dist/index.js.map +1 -1
  6. package/payload/platform/lib/persistent-components/src/index.ts +11 -12
  7. package/payload/platform/neo4j/schema.cypher +6 -3
  8. package/payload/platform/plugins/admin/.claude-plugin/plugin.json +1 -1
  9. package/payload/platform/plugins/admin/PLUGIN.md +1 -3
  10. package/payload/platform/plugins/admin/hooks/onboarding-skill-drift.sh +5 -4
  11. package/payload/platform/plugins/admin/mcp/dist/index.js +15 -50
  12. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  13. package/payload/platform/plugins/admin/skills/access-manager/references/operations.md +7 -7
  14. package/payload/platform/plugins/admin/skills/public-agent-manager/SKILL.md +1 -1
  15. package/payload/platform/plugins/admin/skills/stream-log-review/references/analysis-patterns.md +2 -2
  16. package/payload/platform/plugins/anthropic/skills/get-api-key/SKILL.md +2 -4
  17. package/payload/platform/plugins/email/references/email-reference.md +3 -7
  18. package/payload/platform/plugins/teaching/PLUGIN.md +2 -1
  19. package/payload/platform/plugins/whatsapp/mcp/dist/index.js +1 -1
  20. package/payload/platform/plugins/whatsapp/mcp/dist/index.js.map +1 -1
  21. package/payload/platform/plugins/whatsapp/skills/connect-whatsapp/SKILL.md +1 -1
  22. package/payload/platform/plugins/whatsapp/skills/manage-whatsapp-config/SKILL.md +2 -8
  23. package/payload/platform/plugins/writer-craft/PLUGIN.md +2 -1
  24. package/payload/platform/scripts/component-knowledgedoc-backfill.ts +1 -1
  25. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +1 -1
  26. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  27. package/payload/platform/services/claude-session-manager/dist/http-server.js +45 -31
  28. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  29. package/payload/platform/services/claude-session-manager/dist/index.js +11 -0
  30. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  31. package/payload/platform/services/claude-session-manager/dist/jsonl-observer.d.ts +30 -0
  32. package/payload/platform/services/claude-session-manager/dist/jsonl-observer.d.ts.map +1 -0
  33. package/payload/platform/services/claude-session-manager/dist/jsonl-observer.js +175 -0
  34. package/payload/platform/services/claude-session-manager/dist/jsonl-observer.js.map +1 -0
  35. package/payload/platform/services/claude-session-manager/dist/jsonl-path.d.ts +4 -2
  36. package/payload/platform/services/claude-session-manager/dist/jsonl-path.d.ts.map +1 -1
  37. package/payload/platform/services/claude-session-manager/dist/jsonl-path.js +15 -22
  38. package/payload/platform/services/claude-session-manager/dist/jsonl-path.js.map +1 -1
  39. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +13 -0
  40. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  41. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +26 -4
  42. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  43. package/payload/platform/services/claude-session-manager/dist/session-store.d.ts +9 -0
  44. package/payload/platform/services/claude-session-manager/dist/session-store.d.ts.map +1 -1
  45. package/payload/platform/services/claude-session-manager/dist/session-store.js.map +1 -1
  46. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +10 -7
  47. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
  48. package/payload/platform/services/claude-session-manager/dist/system-prompt.js +51 -28
  49. package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
  50. package/payload/platform/services/claude-session-manager/scripts/onboarding-advance.sh +61 -0
  51. package/payload/platform/services/claude-session-manager/scripts/onboarding-prompts/step-0.md +5 -0
  52. package/payload/platform/services/claude-session-manager/scripts/onboarding-prompts/step-1.md +3 -0
  53. package/payload/platform/services/claude-session-manager/scripts/onboarding-prompts/step-2.md +3 -0
  54. package/payload/platform/services/claude-session-manager/scripts/onboarding-prompts/step-3.md +8 -0
  55. package/payload/platform/services/claude-session-manager/scripts/onboarding-prompts/step-4.md +9 -0
  56. package/payload/platform/services/claude-session-manager/scripts/onboarding-prompts/step-5.md +3 -0
  57. package/payload/platform/services/claude-session-manager/scripts/onboarding-prompts/step-6.md +5 -0
  58. package/payload/platform/services/claude-session-manager/scripts/onboarding-prompts/step-7.md +5 -0
  59. package/payload/platform/services/claude-session-manager/scripts/onboarding-prompts/step-8.md +5 -0
  60. package/payload/platform/services/claude-session-manager/scripts/onboarding-prompts/step-9.md +8 -0
  61. package/payload/platform/services/claude-session-manager/scripts/onboarding-prompts/step-complete.md +3 -0
  62. package/payload/platform/services/claude-session-manager/scripts/onboarding-prompts/step-unreachable.md +3 -0
  63. package/payload/platform/templates/agents/public/IDENTITY.md +1 -1
  64. package/payload/platform/templates/specialists/agents/content-producer.md +3 -3
  65. package/payload/platform/templates/specialists/agents/personal-assistant.md +2 -2
  66. package/payload/premium-plugins/teaching/PLUGIN.md +2 -1
  67. package/payload/premium-plugins/writer-craft/PLUGIN.md +2 -1
  68. package/payload/server/public/assets/{admin-CDvF5de6.js → admin-Bk2eXMFD.js} +24 -24
  69. package/payload/server/public/assets/{data-K_kS__sL.js → data-ll_OwVNL.js} +1 -1
  70. package/payload/server/public/assets/{graph-DeEigyO_.js → graph-DJ2VWioQ.js} +1 -1
  71. package/payload/server/public/assets/graph-labels-qhU8xZDH.js +1 -0
  72. package/payload/server/public/assets/{page-qSH972X0.js → page-Dk73ZO1F.js} +1 -1
  73. package/payload/server/public/assets/{page-B_rpjIRr.js → page-DsYsdBUK.js} +1 -1
  74. package/payload/server/public/data.html +3 -3
  75. package/payload/server/public/graph.html +3 -3
  76. package/payload/server/public/index.html +4 -4
  77. package/payload/server/server.js +121 -46
  78. package/payload/platform/plugins/admin/references/contextual-ui.md +0 -109
  79. package/payload/platform/scripts/__tests__/admin-persist-audit.test.ts +0 -182
  80. package/payload/server/public/assets/graph-labels-C7I5QvNv.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-realagent-code",
3
- "version": "0.1.30",
3
+ "version": "0.1.31",
4
4
  "description": "Install Real Agent — Built for agents. By agents.",
5
5
  "bin": {
6
6
  "create-realagent-code": "./dist/index.js"
@@ -1,17 +1,16 @@
1
1
  /**
2
- * The component names that the platform UI treats as long-lived editor
3
- * surfaces (not single-shot prompts). They survive multiple `onSubmit`
4
- * fires because the operator may auto-save mid-edit, and they are also
5
- * the **server-side commitment surface** for Task 942: when the admin
6
- * agent emits one of these names via `render-component`, the live
7
- * stream-parser materialises the inline content as a sibling
8
- * `:KnowledgeDocument` artefact so the row appears in the artefacts
9
- * panel and survives session compaction.
2
+ * The historical persistent-component names. Pre-Task-066 the admin
3
+ * agent could emit a component tool_use carrying one of these names,
4
+ * and the live stream-parser materialised the inline content as a
5
+ * sibling `:KnowledgeDocument` artefact so the row appeared in the
6
+ * artefacts panel and survived session compaction.
10
7
  *
11
- * Single source of truth the platform UI (`app/admin-types.ts`) and
12
- * the admin MCP server (`plugins/admin/mcp/src/index.ts`) both import
13
- * from this module. Any drift here is an account-isolation /
14
- * persistence-doctrine bug; keep the constant in one place.
8
+ * The emitting tool is gone on native Claude Code (Task 066); the
9
+ * constant is preserved so the rehydration path can still recognise
10
+ * `:Component` rows written by older conversations. New conversations
11
+ * never produce these rows. The single-source-of-truth contract still
12
+ * holds: `app/admin-types.ts` and any consumer that needs to classify
13
+ * a stored component name imports from here.
15
14
  */
16
15
  export declare const PERSISTENT_COMPONENTS: Set<string>;
17
16
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB,aAKhC,CAAC;AAEH;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAE9E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,aAKhC,CAAC;AAEH;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAE9E"}
@@ -3,19 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PERSISTENT_COMPONENTS = void 0;
4
4
  exports.isPersistentComponent = isPersistentComponent;
5
5
  /**
6
- * The component names that the platform UI treats as long-lived editor
7
- * surfaces (not single-shot prompts). They survive multiple `onSubmit`
8
- * fires because the operator may auto-save mid-edit, and they are also
9
- * the **server-side commitment surface** for Task 942: when the admin
10
- * agent emits one of these names via `render-component`, the live
11
- * stream-parser materialises the inline content as a sibling
12
- * `:KnowledgeDocument` artefact so the row appears in the artefacts
13
- * panel and survives session compaction.
6
+ * The historical persistent-component names. Pre-Task-066 the admin
7
+ * agent could emit a component tool_use carrying one of these names,
8
+ * and the live stream-parser materialised the inline content as a
9
+ * sibling `:KnowledgeDocument` artefact so the row appeared in the
10
+ * artefacts panel and survived session compaction.
14
11
  *
15
- * Single source of truth the platform UI (`app/admin-types.ts`) and
16
- * the admin MCP server (`plugins/admin/mcp/src/index.ts`) both import
17
- * from this module. Any drift here is an account-isolation /
18
- * persistence-doctrine bug; keep the constant in one place.
12
+ * The emitting tool is gone on native Claude Code (Task 066); the
13
+ * constant is preserved so the rehydration path can still recognise
14
+ * `:Component` rows written by older conversations. New conversations
15
+ * never produce these rows. The single-source-of-truth contract still
16
+ * holds: `app/admin-types.ts` and any consumer that needs to classify
17
+ * a stored component name imports from here.
19
18
  */
20
19
  exports.PERSISTENT_COMPONENTS = new Set([
21
20
  'action-list',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAyBA,sDAEC;AA3BD;;;;;;;;;;;;;;GAcG;AACU,QAAA,qBAAqB,GAAG,IAAI,GAAG,CAAS;IACnD,aAAa;IACb,iBAAiB;IACjB,qBAAqB;IACrB,aAAa;CACd,CAAC,CAAC;AAEH;;GAEG;AACH,SAAgB,qBAAqB,CAAC,IAA+B;IACnE,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,6BAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAwBA,sDAEC;AA1BD;;;;;;;;;;;;;GAaG;AACU,QAAA,qBAAqB,GAAG,IAAI,GAAG,CAAS;IACnD,aAAa;IACb,iBAAiB;IACjB,qBAAqB;IACrB,aAAa;CACd,CAAC,CAAC;AAEH;;GAEG;AACH,SAAgB,qBAAqB,CAAC,IAA+B;IACnE,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,6BAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrE,CAAC"}
@@ -1,17 +1,16 @@
1
1
  /**
2
- * The component names that the platform UI treats as long-lived editor
3
- * surfaces (not single-shot prompts). They survive multiple `onSubmit`
4
- * fires because the operator may auto-save mid-edit, and they are also
5
- * the **server-side commitment surface** for Task 942: when the admin
6
- * agent emits one of these names via `render-component`, the live
7
- * stream-parser materialises the inline content as a sibling
8
- * `:KnowledgeDocument` artefact so the row appears in the artefacts
9
- * panel and survives session compaction.
2
+ * The historical persistent-component names. Pre-Task-066 the admin
3
+ * agent could emit a component tool_use carrying one of these names,
4
+ * and the live stream-parser materialised the inline content as a
5
+ * sibling `:KnowledgeDocument` artefact so the row appeared in the
6
+ * artefacts panel and survived session compaction.
10
7
  *
11
- * Single source of truth the platform UI (`app/admin-types.ts`) and
12
- * the admin MCP server (`plugins/admin/mcp/src/index.ts`) both import
13
- * from this module. Any drift here is an account-isolation /
14
- * persistence-doctrine bug; keep the constant in one place.
8
+ * The emitting tool is gone on native Claude Code (Task 066); the
9
+ * constant is preserved so the rehydration path can still recognise
10
+ * `:Component` rows written by older conversations. New conversations
11
+ * never produce these rows. The single-source-of-truth contract still
12
+ * holds: `app/admin-types.ts` and any consumer that needs to classify
13
+ * a stored component name imports from here.
15
14
  */
16
15
  export const PERSISTENT_COMPONENTS = new Set<string>([
17
16
  'action-list',
@@ -911,9 +911,12 @@ FOR (tc:ToolCall) ON (tc.accountId, tc.startedAt);
911
911
  // ----------------------------------------------------------
912
912
  // Component — Task 815 admin-resume rehydration.
913
913
  //
914
- // Every render-component event emitted on an assistant turn
915
- // produces one Component node linked to its parent Message via
916
- // (Message)-[:HAS_COMPONENT]->(Component). The agent's narrative
914
+ // Each legacy component event emitted on an assistant turn (pre-066
915
+ // admin agent surface only) produced one Component node linked to its
916
+ // parent Message via (Message)-[:HAS_COMPONENT]->(Component). New
917
+ // conversations never write to this table; the rehydration path keeps
918
+ // the rows in place so historical conversations replay intact. The
919
+ // agent's narrative
917
920
  // text stays on Message.content; component name + data JSON +
918
921
  // position-relative-to-text live here. Sibling-node design (not
919
922
  // JSON-on-Message) avoids Neo4j's 128KB property soft-limit when
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "admin",
3
- "description": "Platform administration plugin. Provides system-status, public-hostname (deterministic Cloudflare public-URL resolver, single call returning the operator's canonical hostname so agents never guess property names on :CloudflareHostname nodes), brand-settings, account-manage, account-update, admin-add, admin-remove, admin-list, admin-update-pin, agent-list, agent-config-read, logs-read, plugin-read, skill-load (one-call resolve+read for SKILL.md by skill name, the canonical primitive for loading a named skill; plugin-read remains the reader for references/* and PLUGIN.md), store-skill (deterministic write counterpart to plugin-read; persists operator-authored skills as plugin files under the active account), session-reset, session-resume, file-attach, wifi, and action-approval tools (action-pending, action-approve, action-reject, action-edit) for managing the Maxy platform. The `render-component` MCP tool is also registered but is exposed to the public agent surface only (Anthropic API runtime); the admin agent on native Claude Code does not call it.",
3
+ "description": "Platform administration plugin. Provides system-status, public-hostname (deterministic Cloudflare public-URL resolver, single call returning the operator's canonical hostname so agents never guess property names on :CloudflareHostname nodes), brand-settings, account-manage, account-update, admin-add, admin-remove, admin-list, admin-update-pin, agent-list, agent-config-read, logs-read, plugin-read, skill-load (one-call resolve+read for SKILL.md by skill name, the canonical primitive for loading a named skill; plugin-read remains the reader for references/* and PLUGIN.md), store-skill (deterministic write counterpart to plugin-read; persists operator-authored skills as plugin files under the active account), session-reset, session-resume, file-attach, wifi, and action-approval tools (action-pending, action-approve, action-reject, action-edit) for managing the Maxy platform.",
4
4
  "version": "0.1.0",
5
5
  "author": {
6
6
  "name": "Rubytech LLC"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: admin
3
- description: "Platform administration plugin. Provides system-status, public-hostname (deterministic Cloudflare public-URL resolver, single call returning the operator's canonical hostname so agents never guess property names on :CloudflareHostname nodes), brand-settings, account-manage, account-update, admin-add, admin-remove, admin-list, admin-update-pin, agent-list, agent-config-read, logs-read, plugin-read, skill-load (one-call resolve+read for SKILL.md by skill name, the canonical primitive for loading a named skill; plugin-read remains the reader for references/* and PLUGIN.md), store-skill (deterministic write counterpart to plugin-read; persists operator-authored skills as plugin files under the active account), session-reset, session-resume, file-attach, wifi, and action-approval tools (action-pending, action-approve, action-reject, action-edit) for managing the Maxy platform. The `render-component` MCP tool is also registered but is exposed to the public agent surface only (Anthropic API runtime); the admin agent on native Claude Code does not call it."
3
+ description: "Platform administration plugin. Provides system-status, public-hostname (deterministic Cloudflare public-URL resolver, single call returning the operator's canonical hostname so agents never guess property names on :CloudflareHostname nodes), brand-settings, account-manage, account-update, admin-add, admin-remove, admin-list, admin-update-pin, agent-list, agent-config-read, logs-read, plugin-read, skill-load (one-call resolve+read for SKILL.md by skill name, the canonical primitive for loading a named skill; plugin-read remains the reader for references/* and PLUGIN.md), store-skill (deterministic write counterpart to plugin-read; persists operator-authored skills as plugin files under the active account), session-reset, session-resume, file-attach, wifi, and action-approval tools (action-pending, action-approve, action-reject, action-edit) for managing the Maxy platform."
4
4
  tools:
5
5
  - name: system-status
6
6
  publicAllowlist: false
@@ -32,8 +32,6 @@ tools:
32
32
  publicAllowlist: false
33
33
  - name: store-skill
34
34
  publicAllowlist: false
35
- - name: render-component
36
- publicAllowlist: false
37
35
  - name: session-reset
38
36
  publicAllowlist: false
39
37
  - name: session-resume
@@ -1,8 +1,9 @@
1
1
  #!/usr/bin/env bash
2
- # Task 063 / Task 049. Stop-event hook that flags admin agent onboarding
3
- # drift on the native Claude Code (PTY) surface. Post-Task-049 there is no
4
- # `render-component` tool, so the contract is no longer "called render-component";
5
- # it is "the assistant ends its turn on a prompt the operator can answer".
2
+ # Task 063 / 066. Stop-event hook that flags admin agent onboarding
3
+ # drift on the native Claude Code (PTY) surface. The contract is "the
4
+ # assistant ends its turn on a prompt the operator can answer" — no
5
+ # named tool, no per-turn imperative, just a chat-surface end-state
6
+ # check.
6
7
  #
7
8
  # Behaviour:
8
9
  # 1. Read transcript_path from the Stop event JSON on stdin.
@@ -10,7 +10,6 @@ import { execFileSync } from "node:child_process";
10
10
  import { appendFileSync, cpSync, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
11
11
  import { writeKey, validateKey, hasKey, keyFilePath, deleteKey } from "../../../../lib/anthropic-key/dist/index.js";
12
12
  import { writeAdminEntry, removeAdminFromAccount } from "../../../../lib/admins-write/dist/index.js";
13
- import { isPersistentComponent } from "../../../../lib/persistent-components/dist/index.js";
14
13
  import { deviceUrlBlock } from "../../../../lib/device-url/dist/index.js";
15
14
  import { substituteBrandPlaceholders } from "../../../../lib/brand-templating/dist/index.js";
16
15
  import { resolveEntitlement } from "../../../../lib/entitlement/dist/index.js";
@@ -507,7 +506,7 @@ const PLUGIN_DISPLAY = {
507
506
  waitlist: { value: "waitlist", label: "waitlist", description: "Waitlist lifecycle — extract sign-ups, review, schedule automation." },
508
507
  replicate: { value: "replicate", label: "replicate", description: "Image generation — photorealistic, design, and fast draft images via Replicate. Enhances: content-producer, research-assistant" },
509
508
  };
510
- server.tool("onboarding-plugin-options", "Return the fully-assembled multi-select options array for onboarding Step 1. Classification (core/recommended/available) is derived from brand.json — the agent renders the result directly via render-component without further transformation.", {}, async () => {
509
+ server.tool("onboarding-plugin-options", "Return the fully-assembled plugin options array for onboarding Step 1. Classification (core/recommended/available) is derived from brand.json — the agent presents the entries to the operator as a numbered list in plain chat without further transformation.", {}, async () => {
511
510
  try {
512
511
  const brandPath = resolve(PLATFORM_ROOT, "config", "brand.json");
513
512
  if (!existsSync(brandPath)) {
@@ -1769,50 +1768,15 @@ eagerTool(server, "skill-load", "Load a plugin skill's SKILL.md body by skill na
1769
1768
  };
1770
1769
  }
1771
1770
  });
1772
- // Task 940`"rendered"` is a sentinel, not a persistence ack. The platform
1773
- // UI's stream-parser intercepts this tool_use upstream of the SDK reply
1774
- // (platform/ui/app/lib/claude-agent/stream-parser.ts:362) and emits a typed
1775
- // `component` event that admin-agent.ts's persistMessage flushes to Neo4j as
1776
- // a sibling :Component node.
1777
- //
1778
- // Task 942 — render-component is also the *server commitment surface* for
1779
- // PERSISTENT_COMPONENTS (action-list, document-editor, rich-content-editor,
1780
- // grid-editor). The actual file write + :KnowledgeDocument projection lives
1781
- // in the admin server process (stream-parser path) because the SDK delivers
1782
- // `tool_use.input` to the UI in the assistant message but the MCP handler's
1783
- // return reaches only the agent — there is no path back to persistMessage
1784
- // from here. This handler emits a one-line observability marker per
1785
- // persistence-eligible call so operators can grep for the commitment, and
1786
- // returns richer JSON so the doctrine grep
1787
- // `render-component.*"rendered"` resolves to a persistence-aware handler
1788
- // rather than a bare stub.
1789
- eagerTool(server, "render-component", "Render a pre-built UI component inline in the conversation. " +
1790
- "Call this instead of describing a UI — the component handles input collection. " +
1791
- "Wait for the user's response before continuing.", {
1792
- name: z.string().describe("Component name from the UI suite (e.g. single-select, confirm, info-card, form, progress)"),
1793
- data: z.record(z.string(), z.unknown()),
1794
- }, async ({ name, data }) => {
1795
- if (isPersistentComponent(name)) {
1796
- // Persistence-eligible: log the commitment so the live + audit grep
1797
- // (`[render-component-persist]`) can correlate the MCP call against
1798
- // the downstream :KnowledgeDocument MERGE. Byte counts come from
1799
- // data.html (preferred) or data.content; both being absent is a
1800
- // legitimate render of an empty editor and the projection is skipped
1801
- // server-side.
1802
- const html = typeof data?.html === "string" ? data.html : "";
1803
- const content = typeof data?.content === "string" ? data.content : "";
1804
- const bytes = html.length > 0 ? html.length : content.length;
1805
- const mimeType = html.length > 0 ? "text/html" : (content.length > 0 ? "text/markdown" : "");
1806
- console.error(`[render-component-persist] componentName=${name} bytes=${bytes} mimeType=${mimeType || "none"}`);
1807
- return {
1808
- content: [{
1809
- type: "text",
1810
- text: JSON.stringify({ rendered: true, name, persistent: true, bytes, mimeType }),
1811
- }],
1812
- };
1813
- }
1814
- return { content: [{ type: "text", text: "rendered" }] };
1815
- });
1771
+ // Task 066the inline UI-component tool is gone from the admin surface
1772
+ // on native Claude Code. The PTY runtime has no host bridge for the UI
1773
+ // primitives the legacy tool wrapped; calling it logged a "rendered"
1774
+ // sentinel that read like a successful render to the agent while the
1775
+ // chat surface saw nothing. Admin flows now use plain markdown for
1776
+ // reviewable artefacts (`skills/file-presentation/SKILL.md`) and
1777
+ // `file-attach` for downloadable artefacts. The :Component / :KnowledgeDocument
1778
+ // persistence pipeline is preserved for historical conversations that
1779
+ // already carry the rows; no new conversations write to it.
1816
1780
  eagerTool(server, "session-reset", "Reset the current session. Compacts conversation history to memory, clears the visible conversation, " +
1817
1781
  "and starts a fresh session with a new greeting. Call when the user asks to start a new session, " +
1818
1782
  "clear the conversation, or start fresh.", {}, async () => ({ content: [{ type: "text", text: "reset" }] }));
@@ -2984,10 +2948,11 @@ server.tool("premium-deliver", "Deliver a purchased premium plugin. Copies plugi
2984
2948
  // file-attach — copy a generated file into the attachment store for download
2985
2949
  // ---------------------------------------------------------------------------
2986
2950
  eagerTool(server, "file-attach", "Attach a file from the account directory for delivery to the user. " +
2987
- "Copies the file into the attachment store and returns metadata for rendering " +
2988
- "a download component. The file must be within the account directory tree. " +
2989
- "After calling this tool, call render-component with name 'file-attachment' " +
2990
- "and pass the returned metadata as data.", {
2951
+ "Copies the file into the attachment store and returns metadata the chat " +
2952
+ "surface uses to present the download. The file must be within the account " +
2953
+ "directory tree. The returned metadata is the operator-visible record of the " +
2954
+ "attachment; quote it back to the user in plain text so they have the filename " +
2955
+ "and size on screen.", {
2991
2956
  filePath: z.string().describe("Absolute path to the file to attach"),
2992
2957
  }, async ({ filePath }) => {
2993
2958
  const TAG = "[file-attach]";