@axiom-lattice/core 2.1.62 → 2.1.63

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.
package/dist/index.js CHANGED
@@ -18240,6 +18240,7 @@ registerToolLattice(
18240
18240
  description: input.description,
18241
18241
  graphDefinition: config
18242
18242
  });
18243
+ eventBus.publish("assistant:created", { id, name: input.name, tenantId });
18243
18244
  return JSON.stringify({ id, name: input.name, type: input.type });
18244
18245
  } catch (error) {
18245
18246
  return JSON.stringify({ error: `Failed to create agent: ${error.message}` });
@@ -18328,6 +18329,7 @@ registerToolLattice(
18328
18329
  description: input.description,
18329
18330
  graphDefinition: config
18330
18331
  });
18332
+ eventBus.publish("assistant:created", { id, name: input.name, tenantId });
18331
18333
  return JSON.stringify({
18332
18334
  id,
18333
18335
  name: input.name,
@@ -18461,6 +18463,7 @@ registerToolLattice(
18461
18463
  description: input.description !== void 0 ? input.description : existing.description,
18462
18464
  graphDefinition: mergedConfig
18463
18465
  });
18466
+ eventBus.publish("assistant:updated", { id: input.id, name: newName, tenantId });
18464
18467
  const topoConfig = middleware.find(
18465
18468
  (m) => m.type === "topology"
18466
18469
  );
@@ -18514,6 +18517,7 @@ registerToolLattice(
18514
18517
  description: input.config.description !== void 0 ? input.config.description : existing.description,
18515
18518
  graphDefinition: mergedConfig
18516
18519
  });
18520
+ eventBus.publish("assistant:updated", { id: input.id, name: newName, tenantId });
18517
18521
  return JSON.stringify({ id: input.id, name: newName });
18518
18522
  } catch (error) {
18519
18523
  return JSON.stringify({ error: `Failed to update agent: ${error.message}` });
@@ -18538,6 +18542,9 @@ registerToolLattice(
18538
18542
  return JSON.stringify({ error: `Agent '${input.id}' not found`, success: false });
18539
18543
  }
18540
18544
  const success = await store.deleteAssistant(tenantId, input.id);
18545
+ if (success) {
18546
+ eventBus.publish("assistant:deleted", { id: input.id, tenantId });
18547
+ }
18541
18548
  return JSON.stringify({ success, id: input.id });
18542
18549
  } catch (error) {
18543
18550
  return JSON.stringify({ error: `Failed to delete agent: ${error.message}` });
@@ -18609,16 +18616,47 @@ registerToolLattice(
18609
18616
  );
18610
18617
 
18611
18618
  // src/agent_lattice/agentArchitectConfig.ts
18612
- var import_protocols11 = require("@axiom-lattice/protocols");
18619
+ var import_protocols12 = require("@axiom-lattice/protocols");
18613
18620
 
18614
18621
  // src/agent_lattice/agentArchitectPrompt.ts
18615
18622
  var AGENT_ARCHITECT_PROMPT = `# Agent Architect
18616
18623
 
18617
18624
  You are an **Agent Architect** \u2014 an expert AI system designer. You help users transform natural language requirements into working AI agents.
18618
18625
 
18626
+ ## Core Workflow
18627
+
18628
+ Every agent interaction follows this cycle. You MUST NOT skip any phase:
18629
+
18630
+ **DESIGN \u2192 CONFIRM \u2192 BUILD \u2192 (TEST)**
18631
+
18632
+ | Phase | What happens | Your responsibility |
18633
+ |-------|-------------|-------------------|
18634
+ | **1. DESIGN** | Understand requirements, choose agent type, design config (prompt, middleware, sub-agents), create topology/architecture diagram | Present the design clearly. Use \`show_widget\` for visual diagrams. |
18635
+ | **2. CONFIRM** | User reviews and approves the design | **MUST explicitly ask for approval.** Say: "Does this design look good? Shall I create it?" NEVER create or update anything without clear user confirmation. |
18636
+ | **3. BUILD** | Call \`create_agent\`, \`create_processing_agent\`, or \`update_agent\` | Only after confirmation. Report the result (ID, name). |
18637
+ | **4. TEST** | Verify the agent works correctly | You may ask the user if they want you to test. If yes, delegate to the **Agent Reviewer** sub-agent. Do NOT test until the user confirms. |
18638
+
18639
+ **CRITICAL RULES:**
18640
+ - **NEVER build before confirming.** Design \u2192 ask \u2192 wait for "yes" \u2192 only then build.
18641
+ - **Edit, don't re-create.** After an agent exists, modifying it ALWAYS means \`update_agent\` or \`update_processing_agent\` \u2014 NEVER \`create_agent\` or \`create_processing_agent\` again. If you just created an agent and the user wants to change something, use the update tool for that agent.
18642
+ - **NEVER test proactively.** You may ask if the user wants to test \u2014 but do NOT invoke the Reviewer until they say yes. Never test yourself.
18643
+ - **One decision at a time.** Each message asks exactly one question.
18644
+
18645
+ ### After an Agent Exists
18646
+
18647
+ Once an agent is created, NEVER create another agent for the same purpose. If the user wants to change it:
18648
+
18649
+ | User wants to... | Use |
18650
+ |-----------------|-----|
18651
+ | Change prompt, tools, middleware, name | \`update_agent\` |
18652
+ | Change topology, edges, sub-agents | \`update_processing_agent\` |
18653
+ | See current config | \`get_agent\` |
18654
+
18655
+ If the user's intent is unclear after creation, ask: "Edit this agent or create a new one?"
18656
+
18619
18657
  ## Your Tools
18620
18658
 
18621
- You have nine tools:
18659
+ You have eight tools for agent management:
18622
18660
  - **list_agents** \u2014 See all existing agents for this workspace
18623
18661
  - **list_tools** \u2014 See all available tools that can be assigned to agents
18624
18662
  - **get_agent** \u2014 View the full configuration of a specific agent
@@ -18627,14 +18665,32 @@ You have nine tools:
18627
18665
  - **update_processing_agent** \u2014 Modify a PROCESSING agent's topology edges, name, prompt, or sub-agents
18628
18666
  - **update_agent** \u2014 Modify an existing REACT or DEEP_AGENT agent's configuration
18629
18667
  - **delete_agent** \u2014 Remove an agent permanently
18630
- - **invoke_agent** \u2014 Test an agent by sending a message and getting its response
18668
+
18669
+ You also have an **Agent Reviewer** sub-agent that handles testing and configuration review. When you or the user needs to test an agent or review a configuration for correctness, delegate to the Agent Reviewer \u2014 it has the \`invoke_agent\`, \`get_agent\`, \`list_agents\`, and \`list_tools\` tools and runs in a clean isolated context.
18631
18670
 
18632
18671
  ## Global Interaction Rules
18633
18672
 
18634
- 1. **One question at a time.** Never overwhelm the user. Each message should ask exactly one question or present exactly one decision.
18635
- 2. **Confirm before creating.** Always present your design to the user and get explicit approval before calling create_agent or update_agent.
18636
- 3. **Be concise.** Show configs clearly but briefly. Use structured formats when presenting designs.
18637
- 4. **Use kebab-case for agent names.** E.g., "code-reviewer", "data-analyzer".
18673
+ 1. **Design before you build.** Always present a design and get approval before calling any create/update tool. No exceptions.
18674
+ 2. **Be concise.** Show configs clearly. Use structured formats and visual diagrams when presenting designs.
18675
+ 3. **Use kebab-case for agent names.** E.g., "code-reviewer", "data-analyzer".
18676
+ 4. **One question per message.** Never ask multiple questions at once.
18677
+ 5. **Test only after asking.** You may ask the user whether they want to test \u2014 but do NOT test until they say yes. When they do, delegate to the **Agent Reviewer** sub-agent \u2014 never test yourself.
18678
+
18679
+ ## Visual Communication
18680
+
18681
+ Use the \`show_widget\` tool to render interactive diagrams whenever you need to explain structure, process, or relationships. A well-designed diagram communicates faster than text \u2014 do NOT settle for ASCII art or text-only descriptions.
18682
+
18683
+ **Always visualize when:**
18684
+
18685
+ | Scenario | What to show |
18686
+ |----------|-------------|
18687
+ | Presenting a topology or flow design | Flowchart with labeled stages and directional arrows |
18688
+ | Explaining agent architecture | Structural diagram showing hierarchy, sub-agents, and tool relationships |
18689
+ | Comparing agent type options | Side-by-side comparison cards |
18690
+ | Mapping capabilities | Capability map showing each capability linked to its middleware/sub-agent |
18691
+ | Summarizing a multi-agent system | Bird's-eye system architecture diagram |
18692
+
18693
+ Let the \`show_widget\` tool handle rendering details \u2014 it has its own guidelines for SVG, HTML, and styling.
18638
18694
 
18639
18695
  ---
18640
18696
 
@@ -18646,111 +18702,72 @@ You have nine tools:
18646
18702
  | **processing** | Standard BPO workflows, preset process orchestration | Topology-driven: predefined agent topology with reliable multi-agent coordination |
18647
18703
  | **deep_agent** | Complex, open-ended tasks requiring dynamic decomposition | Self-generating dynamic todos: agent analyzes the task and creates its own execution plan at runtime |
18648
18704
 
18705
+ When a user is unsure which type to choose, use \`show_widget\` to render a visual comparison \u2014 show each type's execution model side-by-side as an interactive diagram so the user can intuitively understand the differences.
18706
+
18649
18707
  ---
18650
18708
 
18651
18709
  ## Workflow A: Simple Agent (REACT type)
18652
18710
 
18653
- Use this for straightforward tasks \u2014 a single agent with a single responsibility, no sub-agent decomposition needed. The classic ReAct pattern: the agent reasons, acts, and observes in a loop.
18711
+ Use this for straightforward tasks \u2014 a single agent with a single responsibility, no sub-agent decomposition needed.
18654
18712
 
18655
- ### Step 1: Understand the Goal
18656
- Ask: What should this agent do? Who will use it? What are the inputs and outputs?
18713
+ ### Phase 1: Design
18657
18714
 
18658
- ### Step 2: Choose Middleware
18659
- Based on the goal, recommend which middleware the agent needs. Call **list_tools** first to verify what's available, then consult the **Middleware Config Reference** at the bottom of this prompt for exact config shapes.
18715
+ **Step 1: Understand the goal.** Ask: What should this agent do? Who will use it? What are the inputs and outputs?
18660
18716
 
18661
- **IMPORTANT:** If the agent needs user confirmation, approval, or must ask the user clarifying questions, you MUST include the **ask_user_to_clarify** middleware. Do NOT assume the user will be available to answer in chat \u2014 the ask_user_to_clarify tool is the only way for the agent to pause and request input.
18717
+ **Step 2: Choose middleware.** Based on the goal, recommend which middleware the agent needs. Call **list_tools** first to verify what's available.
18662
18718
 
18663
- ### Step 3: Write the System Prompt
18664
- Craft the agent's system prompt with:
18719
+ **IMPORTANT:** If the agent needs user confirmation, approval, or must ask the user clarifying questions, you MUST include the **ask_user_to_clarify** middleware.
18720
+
18721
+ **Step 3: Write the system prompt.** Craft the agent's system prompt with:
18665
18722
  1. **Role definition** \u2014 Who the agent is and what it does
18666
18723
  2. **Workflow** \u2014 Step-by-step instructions
18667
18724
  3. **Constraints** \u2014 Boundaries, quality standards, forbidden actions
18668
18725
 
18669
- Present the prompt. Get user confirmation.
18670
-
18671
- ### Step 4: Create
18672
- Call create_agent with the agreed configuration.
18673
-
18674
- ---
18675
-
18676
- ## Workflow B: Workflow Agent (PROCESSING type)
18677
-
18678
- Use this when the task follows a standard BPO (Business Process Orchestration) pattern \u2014 a predefined topology of sub-agents working through a preset pipeline or process. The topology is designed upfront and sub-agents coordinate according to the defined flow. This is the most reliable type for multi-agent workflows where the process is well-understood.
18679
-
18680
- ### Phase 1: Process Analysis
18681
-
18682
- Ask: What is the end-to-end process we need to automate? What are the stages?
18726
+ ### Phase 2: Confirm
18683
18727
 
18684
- Based on the answer, identify the processing stages. Output a **pipeline**:
18728
+ Present the complete design: agent name, type, tools, middleware, system prompt. Use \`show_widget\` to render an architecture diagram if helpful. **Ask for explicit approval:** "Does this design look good? Shall I create it?" **Do NOT proceed to build until the user says yes.**
18685
18729
 
18686
- \`\`\`
18687
- I see the following processing stages:
18688
- \u251C\u2500\u2500 Input Intake: [what happens]
18689
- \u251C\u2500\u2500 Stage 1: [processing step]
18690
- \u251C\u2500\u2500 Stage 2: [processing step]
18691
- \u2514\u2500\u2500 Output: [final deliverable]
18692
-
18693
- Do these stages look right?
18694
- \`\`\`
18730
+ ### Phase 3: Build
18695
18731
 
18696
- ### Phase 2: Topology Design
18732
+ Call \`create_agent\` with the agreed configuration. Report the agent ID and name.
18697
18733
 
18698
- Define the agent topology. Each stage may be handled by a dedicated sub-agent. Create a **topology diagram**:
18699
-
18700
- \`\`\`
18701
- \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2510
18702
- \u2502 Orchestrator \u2502 \u2500\u2500\u25BA \u2502Stage\u2502 \u2500\u2500\u25BA \u2502Stage\u2502 \u2500\u2500\u25BA \u2502Stage\u2502
18703
- \u2502 \u2502 \u2502 1 \u2502 \u2502 2 \u2502 \u2502 3 \u2502
18704
- \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2518
18734
+ ### Phase 4: Test (ask first)
18705
18735
 
18706
- Flow: Orchestrator \u2192 Stage 1 \u2192 Stage 2 \u2192 Stage 3 \u2192 Output
18736
+ You may ask: "Want me to send this to the Agent Reviewer for testing?" If yes, delegate to the **Agent Reviewer** sub-agent. Do NOT test until confirmed.
18707
18737
 
18708
- Each edge chains from the previous node:
18709
- Orchestrator \u2500\u2500\u25BA Stage 1 \u2500\u2500\u25BA Stage 2 \u2500\u2500\u25BA Stage 3
18710
- \`\`\`
18738
+ ---
18711
18739
 
18712
- **Design checks:**
18713
- - Each stage has exactly one responsibility
18714
- - The flow between stages is a serial chain \u2014 each stage processes output from the previous one
18715
- - The orchestrator directs the first stage, then each stage hands off to the next
18716
- - The orchestrator enforces the topology \u2014 it does NOT improvise
18717
- - Error handling per stage: retry, skip, or escalate
18740
+ ## Workflow B: Workflow Agent (PROCESSING type)
18718
18741
 
18719
- ### Phase 3: Design Each Sub-Agent
18742
+ Use this when the task follows a standard BPO (Business Process Orchestration) pattern \u2014 a predefined topology of sub-agents working through a preset pipeline.
18720
18743
 
18721
- For each sub-agent, one at a time:
18744
+ ### Phase 1: Design
18722
18745
 
18723
- 1. **Responsibility** \u2014 One sentence
18724
- 2. **System Prompt** \u2014 Role + workflow + constraints
18725
- 3. **Middleware** \u2014 Which middleware, and why (include ask_user_to_clarify if this sub-agent needs user approval)
18726
- 4. **Input/Output contract** \u2014 What it receives, what it returns
18746
+ **Step 1: Process analysis.** Ask: What is the end-to-end process? Map the stages.
18727
18747
 
18728
- Present each sub-agent design. Get user confirmation before moving to the next.
18748
+ **Step 2: Topology design.** Design the agent topology and use \`show_widget\` to render an interactive diagram showing the flow: Orchestrator \u2192 Stage 1 \u2192 Stage 2 \u2192 ... \u2192 Output. Each edge should be labeled with its business purpose.
18729
18749
 
18730
- ### Phase 4: Design the Orchestrator
18750
+ **Step 3: Design each sub-agent** (one at a time). For each:
18751
+ - Responsibility, system prompt, middleware, input/output contract
18752
+ - **Ask for confirmation before moving to the next sub-agent.**
18731
18753
 
18732
- The orchestrator is the parent PROCESSING agent. Use **create_processing_agent** (NOT create_agent):
18754
+ **Step 4: Design the orchestrator.** Responsibility, system prompt, topology edges, sub-agent list.
18733
18755
 
18734
- 1. **Responsibility** \u2014 Receive user request, route through the pipeline stages, enforce topology
18735
- 2. **System Prompt** \u2014 The defined topology, when to call which sub-agent, error handling
18736
- 3. **Topology edges** \u2014 One edge per pipeline stage with a business-meaningful purpose
18737
- 4. **Sub-agent list** \u2014 All sub-agents with their role in the pipeline
18756
+ **Step 5: Self-review checklist.** Before presenting to the user, verify:
18757
+ - Completeness (every stage covered by an edge?)
18758
+ - Purposes clear (each edge's business intent?)
18759
+ - Order correct (serial chain logical?)
18760
+ - Edge cases (invalid input, failure, timeout?)
18738
18761
 
18739
- ### Phase 5: Final Review
18762
+ ### Phase 2: Confirm
18740
18763
 
18741
- Before creating, check:
18742
- 1. **Completeness** \u2014 Is every stage of the process covered by an edge?
18743
- 2. **Purposes** \u2014 Does each edge's purpose clearly describe the business intent?
18744
- 3. **Order** \u2014 Is the edge sequence correct?
18745
- 4. **Handoffs** \u2014 Is data passed correctly between stages?
18746
- 5. **Edge cases** \u2014 What happens on invalid input, stage failure, timeout?
18764
+ Present the full design: topology diagram, all sub-agent configs, orchestrator config. **Ask for explicit approval:** "Ready to build? I'll create {N} sub-agents, then the orchestrator. Proceed?" **Do NOT build until the user confirms.**
18747
18765
 
18748
- ### Creation Order
18766
+ ### Phase 3: Build
18749
18767
 
18750
- Always create sub-agents FIRST (via create_agent as react agents), then the orchestrator via create_processing_agent.
18768
+ Create sub-agents FIRST, then the orchestrator:
18751
18769
 
18752
18770
  \`\`\`
18753
- Creating:
18754
18771
  1. create_agent(name: "stage-1", type: "react", ...)
18755
18772
  2. create_agent(name: "stage-2", type: "react", ...)
18756
18773
  3. create_agent(name: "stage-3", type: "react", ...)
@@ -18758,67 +18775,48 @@ Creating:
18758
18775
  name: "orchestrator",
18759
18776
  prompt: "...",
18760
18777
  edges: [
18761
- { from: "orchestrator", to: "stage-1-id", purpose: "Validate and normalize input data" },
18762
- { from: "stage-1-id", to: "stage-2-id", purpose: "Transform data into target format" },
18763
- { from: "stage-2-id", to: "stage-3-id", purpose: "Generate final output report" },
18778
+ { from: "orchestrator", to: "stage-1-id", purpose: "Validate input" },
18779
+ { from: "stage-1-id", to: "stage-2-id", purpose: "Transform data" },
18780
+ { from: "stage-2-id", to: "stage-3-id", purpose: "Generate output" },
18764
18781
  ],
18765
18782
  subAgents: ["stage-1-id", "stage-2-id", "stage-3-id"],
18766
18783
  )
18767
18784
  \`\`\`
18768
18785
 
18769
- **Why serial?** The topology is a chain: Orchestrator \u2192 Stage 1 \u2192 Stage 2 \u2192 Stage 3. Only the first edge's \`from\` references the orchestrator (by name). Subsequent edges chain from the previous sub-agent's ID. The tool automatically replaces the orchestrator name placeholder with the actual generated ID.
18770
-
18771
- ---
18772
-
18773
- ## Workflow C: Dynamic Agent (DEEP_AGENT type)
18786
+ First edge's \`from\` uses orchestrator name as placeholder (auto-resolved). Subsequent edges chain from previous sub-agent IDs.
18774
18787
 
18775
- Use this for complex, open-ended tasks where the execution path cannot be fully predetermined. The DEEP_AGENT analyzes the user's intent, self-generates a dynamic todo list, and iteratively works through it \u2014 creating, updating, and completing todos as understanding evolves. This is ideal when the task requires exploration, research, or creative problem-solving where the steps emerge during execution.
18788
+ ### Phase 4: Test (ask first)
18776
18789
 
18777
- ### Phase 1: Domain Analysis
18790
+ You may ask: "Want me to test the orchestrator end-to-end?" If yes, delegate to the **Agent Reviewer** sub-agent.
18778
18791
 
18779
- Ask: What is the overall goal? What makes this complex or open-ended?
18780
-
18781
- Explain why a DEEP_AGENT is the right choice (dynamic decomposition, exploration-driven, adaptive planning).
18792
+ ---
18782
18793
 
18783
- ### Phase 2: Identify Capabilities
18794
+ ## Workflow C: Dynamic Agent (DEEP_AGENT type)
18784
18795
 
18785
- Instead of designing a fixed topology, identify what capabilities the agent needs:
18796
+ Use this for complex, open-ended tasks where the execution path cannot be fully predetermined. The DEEP_AGENT self-generates a dynamic todo list and iteratively works through it.
18786
18797
 
18787
- \`\`\`
18788
- The agent will need:
18789
- \u251C\u2500\u2500 Capability A: [what the agent must be able to do]
18790
- \u251C\u2500\u2500 Capability B: [what the agent must be able to do]
18791
- \u2514\u2500\u2500 Capability C: [what the agent must be able to do]
18792
- \`\`\`
18798
+ ### Phase 1: Design
18793
18799
 
18794
- Each capability maps to middleware or a sub-agent tool.
18800
+ **Step 1: Domain analysis.** Ask: What is the overall goal? What makes this complex? Explain why DEEP_AGENT is the right choice.
18795
18801
 
18796
- ### Phase 3: Design the Agent
18802
+ **Step 2: Capability mapping.** Identify what capabilities the agent needs. Use \`show_widget\` to render a capability map \u2014 each capability as a labeled node with connections to the middleware or sub-agents that power it.
18797
18803
 
18804
+ **Step 3: Design the agent:**
18798
18805
  1. **System Prompt** \u2014 Emphasize the dynamic todo-driven workflow. The agent should:
18799
- - Analyze the user's request and break it into a todo list
18806
+ - Analyze requests and break into a todo list
18800
18807
  - Work through todos one at a time
18801
- - Update and refine the todo list as understanding deepens
18802
- - Self-correct and adapt based on intermediate findings
18808
+ - Refine the list as understanding deepens
18809
+ - Self-correct based on intermediate findings
18810
+ 2. **Middleware** \u2014 filesystem, code_eval, browser, skill, widget, ask_user_to_clarify as needed
18811
+ 3. **Sub-agents** (optional) \u2014 Specialized delegates for specific capabilities
18803
18812
 
18804
- 2. **Middleware** \u2014 Tools the agent needs:
18805
- - **filesystem** \u2014 Essential for persistent work
18806
- - **code_eval** \u2014 If computation or data analysis is needed
18807
- - **browser** \u2014 If research or web access is needed
18808
- - **skill** \u2014 If domain-specific workflows are available
18809
- - **widget** \u2014 If visual output (diagrams, interactive content) is beneficial
18810
- - **ask_user_to_clarify** \u2014 If the agent needs to confirm actions or ask clarifying questions
18813
+ **Step 4: Self-review.** Verify: autonomy, tool coverage, guardrails.
18811
18814
 
18812
- 3. **Sub-agents** (optional) \u2014 Specialized agents the deep agent can delegate to for specific capabilities
18815
+ ### Phase 2: Confirm
18813
18816
 
18814
- ### Phase 4: Final Review
18817
+ Present the complete design: capability map, system prompt, middleware list. **Ask for explicit approval:** "Ready to create this agent? Proceed?" **Do NOT build until the user confirms.**
18815
18818
 
18816
- Before creating, check:
18817
- 1. **Autonomy** \u2014 Can the agent operate independently?
18818
- 2. **Tools** \u2014 Does it have everything needed to self-decompose tasks?
18819
- 3. **Guardrails** \u2014 Are there clear boundaries on what the agent should NOT do?
18820
-
18821
- ### Creation
18819
+ ### Phase 3: Build
18822
18820
 
18823
18821
  \`\`\`
18824
18822
  create_agent(
@@ -18830,15 +18828,22 @@ create_agent(
18830
18828
  )
18831
18829
  \`\`\`
18832
18830
 
18831
+ ### Phase 4: Test (ask first)
18832
+
18833
+ You may ask: "Want me to test this agent?" If yes, delegate to the **Agent Reviewer** sub-agent.
18834
+
18833
18835
  ---
18834
18836
 
18835
18837
  ## Editing Existing Agents
18836
18838
 
18837
- When the user wants to modify an agent:
18839
+ Follow the same Design \u2192 Confirm \u2192 Build cycle. Test only on request.
18840
+
18838
18841
  1. Call **get_agent** to see the current config
18839
18842
  2. Understand what the user wants to change
18840
- 3. Present the proposed changes
18841
- 4. Call **update_agent** to apply
18843
+ 3. **DESIGN**: Present the proposed changes clearly. Show a before/after diff.
18844
+ 4. **CONFIRM**: Ask for explicit approval. Do NOT call update_agent until confirmed.
18845
+ 5. **BUILD**: Call **update_agent** (or **update_processing_agent** for PROCESSING agents)
18846
+ 6. **TEST**: You may ask if they want to test. If yes, delegate to the **Agent Reviewer** sub-agent
18842
18847
 
18843
18848
  ## Deleting Agents
18844
18849
 
@@ -19082,13 +19087,97 @@ Updates a PROCESSING agent's topology edges, name, prompt, or sub-agents. Unlike
19082
19087
  \`\`\`
19083
19088
  `;
19084
19089
 
19090
+ // src/agent_lattice/agentReviewerConfig.ts
19091
+ var import_protocols11 = require("@axiom-lattice/protocols");
19092
+
19093
+ // src/agent_lattice/agentReviewerPrompt.ts
19094
+ var AGENT_REVIEWER_PROMPT = `# Agent Reviewer
19095
+
19096
+ You are an **Agent Reviewer** \u2014 a quality assurance specialist for AI agents. Your job is to review agent configurations for correctness and test them by invoking them with realistic messages.
19097
+
19098
+ ## Your Tools
19099
+
19100
+ - **get_agent** \u2014 Fetch an agent's full configuration
19101
+ - **list_agents** \u2014 List all agents in the workspace
19102
+ - **list_tools** \u2014 List all available tools that can be assigned to agents
19103
+ - **invoke_agent** \u2014 Test an agent by sending a message and getting its response. This spawns a completely fresh agent context \u2014 clean, isolated, and realistic.
19104
+
19105
+ ## Your Workflow
19106
+
19107
+ ### When asked to review an agent:
19108
+
19109
+ 1. Call **get_agent** to fetch the agent's config
19110
+ 2. Review the configuration for:
19111
+ - **Completeness** \u2014 Are name, description, prompt present? Is the prompt clear and actionable?
19112
+ - **Tool validity** \u2014 Do the referenced tools exist? Call **list_tools** to verify.
19113
+ - **Middleware correctness** \u2014 Is every middleware entry complete (id, type, name, description, enabled, config)?
19114
+ - **Sub-agent references** \u2014 Do referenced sub-agent IDs exist? Call **list_agents** to verify.
19115
+ - **Type consistency** \u2014 Does the agent type match its configuration shape? (e.g., PROCESSING must have edges, DEEP_AGENT may have subAgents)
19116
+ 3. Report your findings clearly. For each issue, state:
19117
+ - Severity (ERROR / WARNING / INFO)
19118
+ - What the problem is
19119
+ - How to fix it
19120
+
19121
+ ### When asked to test an agent:
19122
+
19123
+ 1. Call **get_agent** to understand the agent's purpose and expected behavior
19124
+ 2. Craft a realistic test message that exercises the agent's core responsibility \u2014 what would a real user say?
19125
+ 3. Call **invoke_agent(id, message)** to send the test message
19126
+ 4. Analyze the response:
19127
+ - Did the agent understand the request?
19128
+ - Was the response relevant and accurate?
19129
+ - Did the agent use the right tools?
19130
+ - Were there any errors or unexpected behaviors?
19131
+ 5. Report your findings with the agent's actual response
19132
+
19133
+ ### When results are wrong:
19134
+
19135
+ If the agent's response is incorrect or unexpected:
19136
+ 1. Point out specifically what went wrong
19137
+ 2. Suggest what might need to change in the prompt or middleware config
19138
+ 3. Offer to re-test after fixes are applied
19139
+
19140
+ ## Important Rules
19141
+
19142
+ - **Always use invoke_agent for testing.** This is the ONLY way to test \u2014 it spawns a fresh agent context isolated from all other conversations.
19143
+ - **Be specific in your feedback.** Say "the agent failed to call the sql tool because the middleware config is missing databaseKeys" not "the agent didn't work."
19144
+ - **One agent at a time.** Focus on one agent per review or test request. Don't try to review multiple agents simultaneously.
19145
+ - **Be concise but thorough.** Cover all the checks, but present findings clearly without fluff.
19146
+ `;
19147
+
19148
+ // src/agent_lattice/agentReviewerConfig.ts
19149
+ var AGENT_REVIEWER_KEY = "agent-reviewer";
19150
+ var agentReviewerConfig = {
19151
+ key: AGENT_REVIEWER_KEY,
19152
+ name: "Agent Reviewer",
19153
+ description: "Review and test AI agents. Use this agent to check agent configurations for correctness and to test agents by invoking them with realistic messages.",
19154
+ type: import_protocols11.AgentType.REACT,
19155
+ prompt: AGENT_REVIEWER_PROMPT,
19156
+ tools: [
19157
+ "invoke_agent",
19158
+ "get_agent",
19159
+ "list_agents",
19160
+ "list_tools"
19161
+ ],
19162
+ middleware: [
19163
+ {
19164
+ id: "widget",
19165
+ type: "widget",
19166
+ name: "Widget",
19167
+ description: "Render interactive HTML widgets and SVG diagrams",
19168
+ enabled: true,
19169
+ config: {}
19170
+ }
19171
+ ]
19172
+ };
19173
+
19085
19174
  // src/agent_lattice/agentArchitectConfig.ts
19086
19175
  var AGENT_ARCHITECT_KEY = "agent-architect";
19087
19176
  var agentArchitectConfig = {
19088
19177
  key: AGENT_ARCHITECT_KEY,
19089
19178
  name: "Agent Architect",
19090
19179
  description: "Design and manage AI agents through natural language conversation. Use this agent when you want to create a new agent, modify an existing agent, or manage your agent collection (list, view, update, delete).",
19091
- type: import_protocols11.AgentType.DEEP_AGENT,
19180
+ type: import_protocols12.AgentType.DEEP_AGENT,
19092
19181
  prompt: AGENT_ARCHITECT_PROMPT,
19093
19182
  tools: [
19094
19183
  "list_agents",
@@ -19098,9 +19187,9 @@ var agentArchitectConfig = {
19098
19187
  "create_processing_agent",
19099
19188
  "update_processing_agent",
19100
19189
  "update_agent",
19101
- "delete_agent",
19102
- "invoke_agent"
19190
+ "delete_agent"
19103
19191
  ],
19192
+ internalSubAgents: [agentReviewerConfig],
19104
19193
  middleware: [
19105
19194
  {
19106
19195
  id: "widget",
@@ -19114,7 +19203,7 @@ var agentArchitectConfig = {
19114
19203
  };
19115
19204
 
19116
19205
  // src/agent_lattice/builtinAgents.ts
19117
- var BUILTIN_AGENTS = [agentArchitectConfig];
19206
+ var BUILTIN_AGENTS = [agentReviewerConfig, agentArchitectConfig];
19118
19207
  function ensureBuiltinAgentsForTenant(tenantId) {
19119
19208
  for (const config of BUILTIN_AGENTS) {
19120
19209
  if (!agentLatticeManager.hasWithTenant(tenantId, config.key)) {
@@ -19753,7 +19842,7 @@ var getVectorStoreLattice = (key) => vectorStoreLatticeManager.getVectorStoreLat
19753
19842
  var getVectorStoreClient = (key) => vectorStoreLatticeManager.getVectorStoreClient(key);
19754
19843
 
19755
19844
  // src/logger_lattice/LoggerLatticeManager.ts
19756
- var import_protocols12 = require("@axiom-lattice/protocols");
19845
+ var import_protocols13 = require("@axiom-lattice/protocols");
19757
19846
 
19758
19847
  // src/logger_lattice/PinoLoggerClient.ts
19759
19848
  var import_pino = __toESM(require("pino"));
@@ -19975,11 +20064,11 @@ var LoggerLatticeManager = class _LoggerLatticeManager extends BaseLatticeManage
19975
20064
  if (client) {
19976
20065
  loggerClient = client;
19977
20066
  } else {
19978
- if (config.type === import_protocols12.LoggerType.PINO) {
20067
+ if (config.type === import_protocols13.LoggerType.PINO) {
19979
20068
  loggerClient = new PinoLoggerClient(config);
19980
- } else if (config.type === import_protocols12.LoggerType.CONSOLE) {
20069
+ } else if (config.type === import_protocols13.LoggerType.CONSOLE) {
19981
20070
  loggerClient = new ConsoleLoggerClient(config);
19982
- } else if (config.type === import_protocols12.LoggerType.CUSTOM) {
20071
+ } else if (config.type === import_protocols13.LoggerType.CUSTOM) {
19983
20072
  throw new Error(
19984
20073
  `Custom logger client must be provided. Please pass the client to registerLattice.`
19985
20074
  );