newo 2.0.5 → 3.0.0
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/CHANGELOG.md +124 -0
- package/README.md +146 -0
- package/dist/api.d.ts +17 -1
- package/dist/api.js +78 -0
- package/dist/cli/commands/create-agent.d.ts +3 -0
- package/dist/cli/commands/create-agent.js +75 -0
- package/dist/cli/commands/create-attribute.d.ts +3 -0
- package/dist/cli/commands/create-attribute.js +63 -0
- package/dist/cli/commands/create-event.d.ts +3 -0
- package/dist/cli/commands/create-event.js +66 -0
- package/dist/cli/commands/create-flow.d.ts +3 -0
- package/dist/cli/commands/create-flow.js +100 -0
- package/dist/cli/commands/create-parameter.d.ts +3 -0
- package/dist/cli/commands/create-parameter.js +47 -0
- package/dist/cli/commands/create-persona.d.ts +3 -0
- package/dist/cli/commands/create-persona.js +43 -0
- package/dist/cli/commands/create-project.d.ts +3 -0
- package/dist/cli/commands/create-project.js +55 -0
- package/dist/cli/commands/create-skill.d.ts +3 -0
- package/dist/cli/commands/create-skill.js +115 -0
- package/dist/cli/commands/create-state.d.ts +3 -0
- package/dist/cli/commands/create-state.js +58 -0
- package/dist/cli/commands/delete-agent.d.ts +3 -0
- package/dist/cli/commands/delete-agent.js +70 -0
- package/dist/cli/commands/delete-flow.d.ts +3 -0
- package/dist/cli/commands/delete-flow.js +83 -0
- package/dist/cli/commands/delete-skill.d.ts +3 -0
- package/dist/cli/commands/delete-skill.js +87 -0
- package/dist/cli/commands/help.js +104 -22
- package/dist/cli/commands/push.js +4 -3
- package/dist/cli.js +48 -0
- package/dist/sync/diff-utils.d.ts +18 -0
- package/dist/sync/diff-utils.js +152 -0
- package/dist/sync/push.d.ts +1 -1
- package/dist/sync/push.js +372 -4
- package/dist/sync/skill-files.js +22 -49
- package/dist/sync/status.js +178 -1
- package/dist/types.d.ts +100 -1
- package/package.json +1 -1
- package/src/api.ts +118 -1
- package/src/cli/commands/create-agent.ts +96 -0
- package/src/cli/commands/create-attribute.ts +75 -0
- package/src/cli/commands/create-event.ts +79 -0
- package/src/cli/commands/create-flow.ts +124 -0
- package/src/cli/commands/create-parameter.ts +59 -0
- package/src/cli/commands/create-persona.ts +54 -0
- package/src/cli/commands/create-project.ts +66 -0
- package/src/cli/commands/create-skill.ts +144 -0
- package/src/cli/commands/create-state.ts +71 -0
- package/src/cli/commands/delete-agent.ts +90 -0
- package/src/cli/commands/delete-flow.ts +105 -0
- package/src/cli/commands/delete-skill.ts +110 -0
- package/src/cli/commands/help.ts +104 -22
- package/src/cli/commands/push.ts +5 -3
- package/src/cli.ts +60 -0
- package/src/sync/diff-utils.ts +168 -0
- package/src/sync/push.ts +413 -5
- package/src/sync/skill-files.ts +22 -57
- package/src/sync/status.ts +183 -1
- package/src/types.ts +122 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,130 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [3.0.0] - 2025-01-30
|
|
9
|
+
|
|
10
|
+
### 🏗️ MAJOR FEATURE: Complete Entity Management System
|
|
11
|
+
|
|
12
|
+
**Local-First Development Workflow:**
|
|
13
|
+
- Create entities locally with full metadata
|
|
14
|
+
- Edit in your preferred IDE with proper file extensions
|
|
15
|
+
- Push to platform when ready - automatic detection and creation
|
|
16
|
+
- Full lifecycle management for all NEWO entities
|
|
17
|
+
|
|
18
|
+
### ✨ New Entity Creation Commands (12 commands)
|
|
19
|
+
|
|
20
|
+
**Project & Infrastructure:**
|
|
21
|
+
- `newo create-project <idn>` - Create new projects on platform
|
|
22
|
+
- `newo create-persona <name>` - Create agent personas
|
|
23
|
+
- `newo create-attribute <idn>` - Create customer attributes
|
|
24
|
+
|
|
25
|
+
**Agent Structure:**
|
|
26
|
+
- `newo create-agent <idn> --project <pid>` - Create agents locally with metadata
|
|
27
|
+
- `newo create-flow <idn> --agent <aid>` - Create flows with guidance/NSL runner selection
|
|
28
|
+
- `newo create-skill <idn> --flow <fid>` - Create skills with script content initialization
|
|
29
|
+
|
|
30
|
+
**NSL Components:**
|
|
31
|
+
- `newo create-event <idn> --flow <fid>` - Create flow events for integrations
|
|
32
|
+
- `newo create-state <idn> --flow <fid>` - Create flow state fields (user/flow/global scope)
|
|
33
|
+
- `newo create-parameter <name> --skill <sid>` - Create skill parameters
|
|
34
|
+
|
|
35
|
+
### 🗑️ New Entity Deletion Commands (3 commands)
|
|
36
|
+
|
|
37
|
+
**Safe Deletion with Confirmation:**
|
|
38
|
+
- `newo delete-agent <aid> --confirm` - Delete agent locally (requires --confirm flag)
|
|
39
|
+
- `newo delete-flow <fid> --confirm` - Delete flow locally (requires --confirm flag)
|
|
40
|
+
- `newo delete-skill <sid> --confirm` - Delete skill locally (requires --confirm flag)
|
|
41
|
+
|
|
42
|
+
**Push-to-Sync:** Run `newo push` after deletion to sync changes to platform
|
|
43
|
+
|
|
44
|
+
### 🔄 Enhanced Push Operation
|
|
45
|
+
|
|
46
|
+
**Automatic Local-Only Entity Detection:**
|
|
47
|
+
- Filesystem scanning for entities not yet in project map
|
|
48
|
+
- Automatic detection of new agents, flows, and skills
|
|
49
|
+
- Creates missing entities on platform in correct hierarchical order
|
|
50
|
+
- Publishes flows after creation
|
|
51
|
+
- Maintains proper agent → flow → skill relationships
|
|
52
|
+
- Updates existing skills with changes
|
|
53
|
+
|
|
54
|
+
### 📊 Enhanced Status Command
|
|
55
|
+
|
|
56
|
+
**Comprehensive Change Detection:**
|
|
57
|
+
- Scans for local-only entities not yet on platform
|
|
58
|
+
- Reports new agents/flows/skills awaiting sync
|
|
59
|
+
- Shows full entity lifecycle status
|
|
60
|
+
- Hierarchical display of project structure
|
|
61
|
+
|
|
62
|
+
### 🌐 New API Integrations (19 endpoints)
|
|
63
|
+
|
|
64
|
+
**Entity Creation:**
|
|
65
|
+
- `POST /api/v2/designer/{projectId}/agents` - Create agent
|
|
66
|
+
- `POST /api/v1/designer/{agentId}/flows/empty` - Create flow
|
|
67
|
+
- `POST /api/v1/designer/flows/{flowId}/skills` - Create skill
|
|
68
|
+
- `POST /api/v1/designer/flows/{flowId}/events` - Create event
|
|
69
|
+
- `POST /api/v1/designer/flows/{flowId}/states` - Create state
|
|
70
|
+
- `POST /api/v1/designer/flows/skills/{skillId}/parameters` - Create parameter
|
|
71
|
+
- `POST /api/v1/customer/attributes` - Create attribute
|
|
72
|
+
- `POST /api/v1/designer/personas` - Create persona
|
|
73
|
+
- `POST /api/v1/designer/projects` - Create project
|
|
74
|
+
- `POST /api/v1/designer/flows/{flowId}/publish` - Publish flow
|
|
75
|
+
|
|
76
|
+
**Entity Deletion:**
|
|
77
|
+
- `DELETE /api/v1/designer/agents/{agentId}` - Delete agent
|
|
78
|
+
- `DELETE /api/v1/designer/flows/{flowId}` - Delete flow
|
|
79
|
+
- `DELETE /api/v1/designer/flows/skills/{skillId}` - Delete skill
|
|
80
|
+
- `DELETE /api/v1/designer/flows/events/{eventId}` - Delete event
|
|
81
|
+
|
|
82
|
+
### 📚 Documentation Updates
|
|
83
|
+
|
|
84
|
+
**README.md (+146 lines):**
|
|
85
|
+
- New "Entity Management Commands" section with comprehensive command reference
|
|
86
|
+
- "Entity Creation Workflows" section with end-to-end examples
|
|
87
|
+
- Complete Weather System example demonstrating full lifecycle
|
|
88
|
+
- Quick Agent Creation patterns
|
|
89
|
+
- Local Development & Testing workflows
|
|
90
|
+
- Entity Deletion procedures
|
|
91
|
+
- Updated Key Features section highlighting entity management
|
|
92
|
+
- Enhanced Quick Start with entity creation steps
|
|
93
|
+
- Expanded API Reference with 19 new endpoints
|
|
94
|
+
|
|
95
|
+
### 🔧 Technical Improvements
|
|
96
|
+
|
|
97
|
+
**TypeScript Enhancements:**
|
|
98
|
+
- 19 new type definitions for entity creation/deletion requests and responses
|
|
99
|
+
- Enhanced API client with new endpoint methods
|
|
100
|
+
- Comprehensive error handling for entity operations
|
|
101
|
+
|
|
102
|
+
**Architecture:**
|
|
103
|
+
- 14 new command files in modular architecture (src/cli/commands/)
|
|
104
|
+
- Enhanced push.ts with local-only entity scanning (~418 lines added)
|
|
105
|
+
- Enhanced status.ts with entity detection (~184 lines added)
|
|
106
|
+
- Type-safe entity creation with full metadata support
|
|
107
|
+
|
|
108
|
+
### 🎯 Use Cases Enabled
|
|
109
|
+
|
|
110
|
+
**Complete Project Scaffolding:**
|
|
111
|
+
- Bootstrap entire projects from CLI
|
|
112
|
+
- Create full agent structures locally
|
|
113
|
+
- Test locally before platform deployment
|
|
114
|
+
|
|
115
|
+
**Rapid Development:**
|
|
116
|
+
- Create agents, flows, and skills in seconds
|
|
117
|
+
- No web UI context switching required
|
|
118
|
+
- Full IDE integration with syntax highlighting
|
|
119
|
+
|
|
120
|
+
**Safe Entity Management:**
|
|
121
|
+
- Confirmation flags prevent accidental deletions
|
|
122
|
+
- Local-first approach enables version control
|
|
123
|
+
- Push-to-sync provides controlled deployment
|
|
124
|
+
|
|
125
|
+
### 📊 Statistics
|
|
126
|
+
- **Commands Added**: 15 new commands (12 create, 3 delete)
|
|
127
|
+
- **API Endpoints**: 19 new integrations
|
|
128
|
+
- **Code Changes**: ~1,005 lines added across 7 modified files
|
|
129
|
+
- **Documentation**: +146 lines in README.md
|
|
130
|
+
- **Type Definitions**: 19 new interfaces and types
|
|
131
|
+
|
|
8
132
|
## [1.9.3] - 2025-09-17
|
|
9
133
|
|
|
10
134
|
### 🏗️ Major Architecture Refactoring
|
package/README.md
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
**NEWO CLI** - Professional command-line tool for NEWO AI Agent development. Features **modular architecture**, **IDN-based file management**, and **comprehensive multi-customer support**.
|
|
9
9
|
|
|
10
10
|
Sync NEWO "Project → Agent → Flow → Skills" structure to local files with:
|
|
11
|
+
- 🏗️ **Complete entity management** - Create, edit, and delete agents, flows, skills, events, and states (NEW v2.0+)
|
|
11
12
|
- 🔄 **Intelligent synchronization** - Pull projects, attributes, and conversations automatically
|
|
12
13
|
- 🎯 **IDN-based naming** - Skills named as `{skillIdn}.jinja/.guidance` for better organization
|
|
13
14
|
- 📊 **Real-time progress** - Live progress tracking during large operations (966+ skills)
|
|
@@ -59,6 +60,13 @@ npm install && npm run build
|
|
|
59
60
|
newo status # See what's modified
|
|
60
61
|
```
|
|
61
62
|
|
|
63
|
+
4. **Create entities** (NEW v2.0+):
|
|
64
|
+
```bash
|
|
65
|
+
newo create-agent MyBot --project <project-idn> # Create agent locally
|
|
66
|
+
newo create-flow MainFlow --agent MyBot --project <project-idn> # Create flow
|
|
67
|
+
newo push && newo pull # Sync to platform
|
|
68
|
+
```
|
|
69
|
+
|
|
62
70
|
---
|
|
63
71
|
|
|
64
72
|
## Configuration
|
|
@@ -139,6 +147,37 @@ NEWO_REFRESH_URL=custom_refresh_endpoint # Custom refresh endpoint
|
|
|
139
147
|
| `newo import-akb` | Import knowledge base articles | • Structured text parsing<br>• Bulk article import<br>• Validation and error reporting |
|
|
140
148
|
| `newo meta` | Get project metadata (debug) | • Project structure analysis<br>• Metadata validation |
|
|
141
149
|
|
|
150
|
+
### Entity Management Commands
|
|
151
|
+
|
|
152
|
+
**Complete lifecycle management for NEWO entities with local-first workflow:**
|
|
153
|
+
|
|
154
|
+
| Command | Description | Features |
|
|
155
|
+
|---------|-------------|----------|
|
|
156
|
+
| **Project Management** |||
|
|
157
|
+
| `newo create-project <idn>` | Create new project on platform | • Automatic project initialization<br>• Metadata configuration<br>• Version control support |
|
|
158
|
+
| **Agent Management** |||
|
|
159
|
+
| `newo create-agent <idn> --project <pid>` | Create agent locally | • Local folder structure<br>• Metadata generation<br>• Persona assignment support |
|
|
160
|
+
| `newo delete-agent <aid> --project <pid> --confirm` | Delete agent locally | • Safety confirmation required<br>• Local-only deletion<br>• Push to sync platform |
|
|
161
|
+
| **Flow Management** |||
|
|
162
|
+
| `newo create-flow <idn> --agent <aid> --project <pid>` | Create flow locally | • Guidance/NSL runner selection<br>• Automatic metadata<br>• Push to platform |
|
|
163
|
+
| `newo delete-flow <fid> --agent <aid> --project <pid> --confirm` | Delete flow locally | • Safety confirmation required<br>• Local-only deletion<br>• Push to sync platform |
|
|
164
|
+
| **Skill Management** |||
|
|
165
|
+
| `newo create-skill <idn> --flow <fid> --agent <aid> --project <pid>` | Create skill locally | • Script content initialization<br>• Runner type selection<br>• Parameter support |
|
|
166
|
+
| `newo delete-skill <sid> --flow <fid> --agent <aid> --project <pid> --confirm` | Delete skill locally | • Safety confirmation required<br>• Local-only deletion<br>• Push to sync platform |
|
|
167
|
+
| **Advanced Components (NSL)** |||
|
|
168
|
+
| `newo create-event <idn> --flow <fid>` | Create flow event | • Integration point setup<br>• Skill selector config<br>• Interrupt mode control |
|
|
169
|
+
| `newo create-state <idn> --flow <fid>` | Create flow state field | • User/flow/global scope<br>• Default value config<br>• State persistence |
|
|
170
|
+
| `newo create-parameter <name> --skill <sid>` | Create skill parameter | • Default value support<br>• Type configuration<br>• Parameter metadata |
|
|
171
|
+
| **Identity & Configuration** |||
|
|
172
|
+
| `newo create-persona <name>` | Create agent persona | • Persona configuration<br>• Title and description<br>• Agent assignment |
|
|
173
|
+
| `newo create-attribute <idn> --value <val>` | Create customer attribute | • Enum types support<br>• Group organization<br>• Hidden attributes |
|
|
174
|
+
|
|
175
|
+
**Workflow:**
|
|
176
|
+
1. **Create locally** → Entities created as folder structures with metadata.yaml
|
|
177
|
+
2. **Edit content** → Modify scripts, metadata, and configuration files
|
|
178
|
+
3. **Push to platform** → `newo push` automatically detects and creates entities on NEWO
|
|
179
|
+
4. **Sync complete** → `newo pull` retrieves IDs and platform-generated data
|
|
180
|
+
|
|
142
181
|
### Multi-Customer Commands
|
|
143
182
|
|
|
144
183
|
```bash
|
|
@@ -246,6 +285,16 @@ newo_customers/ # Root folder for all customers
|
|
|
246
285
|
- **Project structure export** - `flows.yaml` for external tooling integration
|
|
247
286
|
- **Cross-project operations** - Commands work across entire workspace
|
|
248
287
|
|
|
288
|
+
### 🏗️ Complete Entity Management (NEW v2.0+)
|
|
289
|
+
- **Local-first workflow** - Create entities locally, push to platform when ready
|
|
290
|
+
- **Full lifecycle support** - Create, edit, delete agents, flows, skills, events, states
|
|
291
|
+
- **Automatic detection** - Push command auto-detects local-only entities
|
|
292
|
+
- **Safe deletion** - Confirmation flags prevent accidental deletions
|
|
293
|
+
- **Hierarchical creation** - Maintains proper agent → flow → skill relationships
|
|
294
|
+
- **NSL component support** - Create events, states, and parameters for NSL flows
|
|
295
|
+
- **Identity management** - Persona and attribute creation and configuration
|
|
296
|
+
- **Project scaffolding** - Complete project initialization from CLI
|
|
297
|
+
|
|
249
298
|
### 🔄 Intelligent Synchronization
|
|
250
299
|
- **Two-way sync** - Pull from NEWO platform, push local changes back
|
|
251
300
|
- **Change detection** - SHA256 hashing prevents unnecessary uploads
|
|
@@ -502,6 +551,80 @@ newo import-akb articles.txt da4550db-2b95-4500-91ff-fb4b60fe7be9
|
|
|
502
551
|
newo import-akb articles.txt persona_id --verbose
|
|
503
552
|
```
|
|
504
553
|
|
|
554
|
+
### Entity Creation Workflows
|
|
555
|
+
|
|
556
|
+
**Complete Weather System Example (End-to-End):**
|
|
557
|
+
|
|
558
|
+
```bash
|
|
559
|
+
# Step 1: Create project infrastructure
|
|
560
|
+
newo create-project weather_system --title "Weather System" --description "Comprehensive weather service"
|
|
561
|
+
newo pull # Sync new project locally
|
|
562
|
+
|
|
563
|
+
# Step 2: Create persona and configuration
|
|
564
|
+
newo create-persona weather_persona --title "Weather Assistant" --description "Professional weather guidance"
|
|
565
|
+
newo create-attribute weather_api_key --value "your_api_key" --group "Weather Config"
|
|
566
|
+
|
|
567
|
+
# Step 3: Create agent structure
|
|
568
|
+
newo create-agent WeatherBot --project weather_system --title "Weather Bot" --persona-id <persona-id>
|
|
569
|
+
newo push && newo pull # Push to platform, sync IDs
|
|
570
|
+
|
|
571
|
+
# Step 4: Create flow and skills
|
|
572
|
+
newo create-flow MainFlow --agent WeatherBot --project weather_system --title "Main Flow" --runner nsl
|
|
573
|
+
newo push && newo pull # Sync flow ID
|
|
574
|
+
|
|
575
|
+
newo create-skill WeatherSkill --flow MainFlow --agent WeatherBot --project weather_system \
|
|
576
|
+
--title "Weather NSL Skill" --runner nsl --script "Welcome to weather service!"
|
|
577
|
+
|
|
578
|
+
# Step 5: Add NSL components
|
|
579
|
+
newo create-event user_message --flow <flow-id> --skill WeatherSkill --integration api --connector webhook
|
|
580
|
+
newo create-state user_location --flow <flow-id> --title "User Location" --scope user
|
|
581
|
+
newo create-state request_count --flow <flow-id> --title "Request Count" --scope flow
|
|
582
|
+
|
|
583
|
+
# Step 6: Final sync
|
|
584
|
+
newo push # Creates complete system
|
|
585
|
+
newo status # Should show: Clean
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
**Quick Agent Creation:**
|
|
589
|
+
|
|
590
|
+
```bash
|
|
591
|
+
# Create complete agent structure
|
|
592
|
+
newo pull # Ensure local projects are synced
|
|
593
|
+
newo create-agent SupportBot --project my_project --title "Support Bot"
|
|
594
|
+
newo create-flow HelpFlow --agent SupportBot --project my_project --title "Help Flow"
|
|
595
|
+
newo push && newo pull # Sync to platform
|
|
596
|
+
|
|
597
|
+
newo create-skill Greeting --flow HelpFlow --agent SupportBot --project my_project \
|
|
598
|
+
--title "Greeting Skill" --runner guidance
|
|
599
|
+
newo push # Deploy to platform
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
**Local Development & Testing:**
|
|
603
|
+
|
|
604
|
+
```bash
|
|
605
|
+
# Create locally, test before pushing
|
|
606
|
+
newo create-agent TestBot --project my_project
|
|
607
|
+
newo create-flow TestFlow --agent TestBot --project my_project
|
|
608
|
+
|
|
609
|
+
# Edit metadata and scripts locally in your IDE
|
|
610
|
+
# newo_customers/CUSTOMER_IDN/projects/my_project/TestBot/TestFlow/
|
|
611
|
+
|
|
612
|
+
newo status # Check changes
|
|
613
|
+
newo push # Deploy when ready
|
|
614
|
+
```
|
|
615
|
+
|
|
616
|
+
**Entity Deletion:**
|
|
617
|
+
|
|
618
|
+
```bash
|
|
619
|
+
# Delete with safety confirmation
|
|
620
|
+
newo delete-skill OldSkill --flow MainFlow --agent SupportBot --project my_project --confirm
|
|
621
|
+
newo delete-flow OldFlow --agent SupportBot --project my_project --confirm
|
|
622
|
+
newo delete-agent OldBot --project my_project --confirm
|
|
623
|
+
|
|
624
|
+
# Push to sync deletions to platform
|
|
625
|
+
newo push
|
|
626
|
+
```
|
|
627
|
+
|
|
505
628
|
---
|
|
506
629
|
|
|
507
630
|
## Development
|
|
@@ -951,6 +1074,29 @@ NEWO CLI integrates with these NEWO platform endpoints:
|
|
|
951
1074
|
- `GET /api/v1/designer/flows/{flowId}/events` - List flow events
|
|
952
1075
|
- `GET /api/v1/designer/flows/{flowId}/states` - List flow states
|
|
953
1076
|
|
|
1077
|
+
### Entity Creation & Deletion (NEW v2.0+)
|
|
1078
|
+
- `POST /api/v2/designer/{projectId}/agents` - Create new agent
|
|
1079
|
+
- `DELETE /api/v1/designer/agents/{agentId}` - Delete agent
|
|
1080
|
+
- `POST /api/v1/designer/{agentId}/flows/empty` - Create new flow
|
|
1081
|
+
- `DELETE /api/v1/designer/flows/{flowId}` - Delete flow
|
|
1082
|
+
- `POST /api/v1/designer/flows/{flowId}/skills` - Create new skill
|
|
1083
|
+
- `DELETE /api/v1/designer/flows/skills/{skillId}` - Delete skill
|
|
1084
|
+
- `POST /api/v1/designer/flows/{flowId}/events` - Create flow event
|
|
1085
|
+
- `DELETE /api/v1/designer/flows/events/{eventId}` - Delete flow event
|
|
1086
|
+
- `POST /api/v1/designer/flows/{flowId}/states` - Create flow state
|
|
1087
|
+
- `POST /api/v1/designer/flows/skills/{skillId}/parameters` - Create skill parameter
|
|
1088
|
+
- `POST /api/v1/customer/attributes` - Create customer attribute
|
|
1089
|
+
- `POST /api/v1/designer/personas` - Create agent persona
|
|
1090
|
+
- `POST /api/v1/designer/projects` - Create project
|
|
1091
|
+
- `POST /api/v1/designer/flows/{flowId}/publish` - Publish flow
|
|
1092
|
+
|
|
1093
|
+
### Conversations & Attributes
|
|
1094
|
+
- `GET /api/v1/bff/conversations/user-personas` - List user personas
|
|
1095
|
+
- `GET /api/v1/chat/history` - Get conversation history
|
|
1096
|
+
- `GET /api/v1/bff/conversations/acts` - Get conversation acts (fallback)
|
|
1097
|
+
- `GET /api/v1/bff/customer/attributes?include_hidden=true` - Get customer attributes
|
|
1098
|
+
- `PUT /api/v1/customer/attributes/{attributeId}` - Update customer attribute
|
|
1099
|
+
|
|
954
1100
|
### Knowledge Base
|
|
955
1101
|
- `POST /api/v1/akb/append-manual` - Import AKB articles to persona
|
|
956
1102
|
|
package/dist/api.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type AxiosInstance } from 'axios';
|
|
2
|
-
import type { ProjectMeta, Agent, Skill, FlowEvent, FlowState, AkbImportArticle, CustomerProfile, CustomerAttribute, CustomerAttributesResponse, UserPersonaResponse, UserPersona, ChatHistoryParams, ChatHistoryResponse } from './types.js';
|
|
2
|
+
import type { ProjectMeta, Agent, Skill, FlowEvent, FlowState, AkbImportArticle, CustomerProfile, CustomerAttribute, CustomerAttributesResponse, UserPersonaResponse, UserPersona, ChatHistoryParams, ChatHistoryResponse, CreateAgentRequest, CreateAgentResponse, CreateFlowRequest, CreateFlowResponse, CreateSkillRequest, CreateSkillResponse, CreateFlowEventRequest, CreateFlowEventResponse, CreateFlowStateRequest, CreateFlowStateResponse, CreateSkillParameterRequest, CreateSkillParameterResponse, CreateCustomerAttributeRequest, CreateCustomerAttributeResponse, CreatePersonaRequest, CreatePersonaResponse, CreateProjectRequest, CreateProjectResponse, PublishFlowRequest, PublishFlowResponse } from './types.js';
|
|
3
3
|
export declare function makeClient(verbose?: boolean, token?: string): Promise<AxiosInstance>;
|
|
4
4
|
export declare function listProjects(client: AxiosInstance): Promise<ProjectMeta[]>;
|
|
5
5
|
export declare function listAgents(client: AxiosInstance, projectId: string): Promise<Agent[]>;
|
|
@@ -20,4 +20,20 @@ export declare function getAccount(client: AxiosInstance): Promise<{
|
|
|
20
20
|
[key: string]: any;
|
|
21
21
|
}>;
|
|
22
22
|
export declare function getChatHistory(client: AxiosInstance, params: ChatHistoryParams): Promise<ChatHistoryResponse>;
|
|
23
|
+
export declare function createAgent(client: AxiosInstance, projectId: string, agentData: CreateAgentRequest): Promise<CreateAgentResponse>;
|
|
24
|
+
export declare function deleteAgent(client: AxiosInstance, agentId: string): Promise<void>;
|
|
25
|
+
export declare function createFlow(client: AxiosInstance, agentId: string, flowData: CreateFlowRequest): Promise<CreateFlowResponse>;
|
|
26
|
+
export declare function deleteFlow(client: AxiosInstance, flowId: string): Promise<void>;
|
|
27
|
+
export declare function createSkill(client: AxiosInstance, flowId: string, skillData: CreateSkillRequest): Promise<CreateSkillResponse>;
|
|
28
|
+
export declare function deleteSkill(client: AxiosInstance, skillId: string): Promise<void>;
|
|
29
|
+
export declare function deleteSkillById(client: AxiosInstance, skillId: string): Promise<void>;
|
|
30
|
+
export declare function createFlowEvent(client: AxiosInstance, flowId: string, eventData: CreateFlowEventRequest): Promise<CreateFlowEventResponse>;
|
|
31
|
+
export declare function deleteFlowEvent(client: AxiosInstance, eventId: string): Promise<void>;
|
|
32
|
+
export declare function createFlowState(client: AxiosInstance, flowId: string, stateData: CreateFlowStateRequest): Promise<CreateFlowStateResponse>;
|
|
33
|
+
export declare function createSkillParameter(client: AxiosInstance, skillId: string, paramData: CreateSkillParameterRequest): Promise<CreateSkillParameterResponse>;
|
|
34
|
+
export declare function createCustomerAttribute(client: AxiosInstance, attributeData: CreateCustomerAttributeRequest): Promise<CreateCustomerAttributeResponse>;
|
|
35
|
+
export declare function createProject(client: AxiosInstance, projectData: CreateProjectRequest): Promise<CreateProjectResponse>;
|
|
36
|
+
export declare function deleteProject(client: AxiosInstance, projectId: string): Promise<void>;
|
|
37
|
+
export declare function createPersona(client: AxiosInstance, personaData: CreatePersonaRequest): Promise<CreatePersonaResponse>;
|
|
38
|
+
export declare function publishFlow(client: AxiosInstance, flowId: string, publishData: PublishFlowRequest): Promise<PublishFlowResponse>;
|
|
23
39
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/api.js
CHANGED
|
@@ -151,4 +151,82 @@ export async function getChatHistory(client, params) {
|
|
|
151
151
|
});
|
|
152
152
|
return response.data;
|
|
153
153
|
}
|
|
154
|
+
// Entity Creation/Deletion API Functions
|
|
155
|
+
export async function createAgent(client, projectId, agentData) {
|
|
156
|
+
// Use project-specific v2 endpoint for proper project association
|
|
157
|
+
const response = await client.post(`/api/v2/designer/${projectId}/agents`, agentData);
|
|
158
|
+
return response.data;
|
|
159
|
+
}
|
|
160
|
+
export async function deleteAgent(client, agentId) {
|
|
161
|
+
await client.delete(`/api/v1/designer/agents/${agentId}`);
|
|
162
|
+
}
|
|
163
|
+
export async function createFlow(client, agentId, flowData) {
|
|
164
|
+
// Use the correct NEWO endpoint pattern for flow creation
|
|
165
|
+
const response = await client.post(`/api/v1/designer/${agentId}/flows/empty`, flowData);
|
|
166
|
+
// The NEWO flow creation API returns empty response body with 201 status
|
|
167
|
+
// The flow is created successfully, but we need to get the ID through agent listing
|
|
168
|
+
if (response.status === 201) {
|
|
169
|
+
// Flow created successfully, but ID will be retrieved during pull operation
|
|
170
|
+
return { id: 'pending-sync' };
|
|
171
|
+
}
|
|
172
|
+
throw new Error(`Flow creation failed with status: ${response.status}`);
|
|
173
|
+
}
|
|
174
|
+
export async function deleteFlow(client, flowId) {
|
|
175
|
+
await client.delete(`/api/v1/designer/flows/${flowId}`);
|
|
176
|
+
}
|
|
177
|
+
export async function createSkill(client, flowId, skillData) {
|
|
178
|
+
const response = await client.post(`/api/v1/designer/flows/${flowId}/skills`, skillData);
|
|
179
|
+
return response.data;
|
|
180
|
+
}
|
|
181
|
+
export async function deleteSkill(client, skillId) {
|
|
182
|
+
await client.delete(`/api/v1/designer/flows/skills/${skillId}`);
|
|
183
|
+
}
|
|
184
|
+
export async function deleteSkillById(client, skillId) {
|
|
185
|
+
console.log(`🗑️ Deleting skill from platform: ${skillId}`);
|
|
186
|
+
await client.delete(`/api/v1/designer/flows/skills/${skillId}`);
|
|
187
|
+
console.log(`✅ Skill deleted from platform: ${skillId}`);
|
|
188
|
+
}
|
|
189
|
+
export async function createFlowEvent(client, flowId, eventData) {
|
|
190
|
+
const response = await client.post(`/api/v1/designer/flows/${flowId}/events`, eventData);
|
|
191
|
+
return response.data;
|
|
192
|
+
}
|
|
193
|
+
export async function deleteFlowEvent(client, eventId) {
|
|
194
|
+
await client.delete(`/api/v1/designer/flows/events/${eventId}`);
|
|
195
|
+
}
|
|
196
|
+
export async function createFlowState(client, flowId, stateData) {
|
|
197
|
+
const response = await client.post(`/api/v1/designer/flows/${flowId}/states`, stateData);
|
|
198
|
+
return response.data;
|
|
199
|
+
}
|
|
200
|
+
export async function createSkillParameter(client, skillId, paramData) {
|
|
201
|
+
// Debug the parameter creation request
|
|
202
|
+
console.log('Creating parameter for skill:', skillId);
|
|
203
|
+
console.log('Parameter data:', JSON.stringify(paramData, null, 2));
|
|
204
|
+
try {
|
|
205
|
+
const response = await client.post(`/api/v1/designer/flows/skills/${skillId}/parameters`, paramData);
|
|
206
|
+
return response.data;
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
console.error('Parameter creation error details:', error.response?.data);
|
|
210
|
+
throw error;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
export async function createCustomerAttribute(client, attributeData) {
|
|
214
|
+
const response = await client.post('/api/v1/customer/attributes', attributeData);
|
|
215
|
+
return response.data;
|
|
216
|
+
}
|
|
217
|
+
export async function createProject(client, projectData) {
|
|
218
|
+
const response = await client.post('/api/v1/designer/projects', projectData);
|
|
219
|
+
return response.data;
|
|
220
|
+
}
|
|
221
|
+
export async function deleteProject(client, projectId) {
|
|
222
|
+
await client.delete(`/api/v1/designer/projects/${projectId}`);
|
|
223
|
+
}
|
|
224
|
+
export async function createPersona(client, personaData) {
|
|
225
|
+
const response = await client.post('/api/v1/customer/personas', personaData);
|
|
226
|
+
return response.data;
|
|
227
|
+
}
|
|
228
|
+
export async function publishFlow(client, flowId, publishData) {
|
|
229
|
+
const response = await client.post(`/api/v1/designer/flows/${flowId}/publish`, publishData);
|
|
230
|
+
return response.data;
|
|
231
|
+
}
|
|
154
232
|
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create Agent Command Handler - Creates local folder structure
|
|
3
|
+
*/
|
|
4
|
+
import { requireSingleCustomer } from '../customer-selection.js';
|
|
5
|
+
import { ensureState, agentMetadataPath, writeFileSafe, projectDir } from '../../fsutil.js';
|
|
6
|
+
import fs from 'fs-extra';
|
|
7
|
+
import yaml from 'js-yaml';
|
|
8
|
+
export async function handleCreateAgentCommand(customerConfig, args, verbose = false) {
|
|
9
|
+
try {
|
|
10
|
+
const selectedCustomer = requireSingleCustomer(customerConfig, args.customer);
|
|
11
|
+
// Parse arguments
|
|
12
|
+
const idn = args._[1];
|
|
13
|
+
const title = args.title || idn;
|
|
14
|
+
const description = args.description || '';
|
|
15
|
+
const projectIdn = args.project;
|
|
16
|
+
const personaId = args['persona-id'];
|
|
17
|
+
if (!idn) {
|
|
18
|
+
console.error('Error: Agent IDN is required');
|
|
19
|
+
console.error('Usage: newo create-agent <idn> --project <project-idn> [--title <title>] [--description <description>] [--persona-id <persona-id>]');
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
if (!projectIdn) {
|
|
23
|
+
console.error('Error: Project IDN is required');
|
|
24
|
+
console.error('Usage: newo create-agent <idn> --project <project-idn> [--title <title>] [--description <description>] [--persona-id <persona-id>]');
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
// Ensure state directory exists
|
|
28
|
+
await ensureState(selectedCustomer.idn);
|
|
29
|
+
// Check if project exists locally
|
|
30
|
+
const projDir = projectDir(selectedCustomer.idn, projectIdn);
|
|
31
|
+
if (!(await fs.pathExists(projDir))) {
|
|
32
|
+
console.error(`❌ Project '${projectIdn}' not found locally. Run 'newo pull' first or check project IDN.`);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
// Check if agent already exists
|
|
36
|
+
const agentDir = `${projDir}/${idn}`;
|
|
37
|
+
if (await fs.pathExists(agentDir)) {
|
|
38
|
+
console.error(`❌ Agent '${idn}' already exists in project '${projectIdn}'`);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
if (verbose) {
|
|
42
|
+
console.log(`📝 Creating agent locally: ${idn}`);
|
|
43
|
+
console.log(` Project: ${projectIdn}`);
|
|
44
|
+
console.log(` Title: ${title}`);
|
|
45
|
+
console.log(` Description: ${description}`);
|
|
46
|
+
console.log(` Persona ID: ${personaId || 'none'}`);
|
|
47
|
+
}
|
|
48
|
+
// Create agent directory
|
|
49
|
+
await fs.ensureDir(agentDir);
|
|
50
|
+
// Create agent metadata
|
|
51
|
+
const agentMetadata = {
|
|
52
|
+
id: '', // Will be set during push
|
|
53
|
+
idn,
|
|
54
|
+
title,
|
|
55
|
+
description,
|
|
56
|
+
persona_id: personaId || null,
|
|
57
|
+
created_at: new Date().toISOString(),
|
|
58
|
+
updated_at: new Date().toISOString()
|
|
59
|
+
};
|
|
60
|
+
// Save agent metadata
|
|
61
|
+
const metadataPath = agentMetadataPath(selectedCustomer.idn, projectIdn, idn);
|
|
62
|
+
const metadataYaml = yaml.dump(agentMetadata, { indent: 2, quotingType: '"', forceQuotes: false });
|
|
63
|
+
await writeFileSafe(metadataPath, metadataYaml);
|
|
64
|
+
console.log(`✅ Agent created locally`);
|
|
65
|
+
console.log(` IDN: ${idn}`);
|
|
66
|
+
console.log(` Title: ${title}`);
|
|
67
|
+
console.log(` Path: ${agentDir}`);
|
|
68
|
+
console.log(` Run 'newo push' to create on NEWO platform`);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
console.error('❌ Failed to create agent locally:', error instanceof Error ? error.message : String(error));
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=create-agent.js.map
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create Customer Attribute Command Handler
|
|
3
|
+
*/
|
|
4
|
+
import { makeClient, createCustomerAttribute } from '../../api.js';
|
|
5
|
+
import { getValidAccessToken } from '../../auth.js';
|
|
6
|
+
import { requireSingleCustomer } from '../customer-selection.js';
|
|
7
|
+
export async function handleCreateAttributeCommand(customerConfig, args, verbose = false) {
|
|
8
|
+
try {
|
|
9
|
+
const selectedCustomer = requireSingleCustomer(customerConfig, args.customer);
|
|
10
|
+
// Parse arguments
|
|
11
|
+
const idn = args._[1];
|
|
12
|
+
const value = args.value || '';
|
|
13
|
+
const title = args.title || idn;
|
|
14
|
+
const description = args.description || '';
|
|
15
|
+
const group = args.group || 'General';
|
|
16
|
+
const isHidden = Boolean(args.hidden);
|
|
17
|
+
const valueType = args['value-type'] || 'string';
|
|
18
|
+
const possibleValues = args['possible-values'] ?
|
|
19
|
+
args['possible-values'].split(',').map(v => v.trim()) : [];
|
|
20
|
+
if (!idn) {
|
|
21
|
+
console.error('Error: Attribute IDN is required');
|
|
22
|
+
console.error('Usage: newo create-attribute <idn> --value <value> [--title <title>] [--description <desc>] [--group <group>] [--hidden] [--value-type <type>] [--possible-values <val1,val2>]');
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
if (!value) {
|
|
26
|
+
console.error('Error: Attribute value is required');
|
|
27
|
+
console.error('Usage: newo create-attribute <idn> --value <value> [options]');
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
if (verbose) {
|
|
31
|
+
console.log(`📝 Creating customer attribute: ${idn}`);
|
|
32
|
+
console.log(` Title: ${title}`);
|
|
33
|
+
console.log(` Value: ${value}`);
|
|
34
|
+
console.log(` Group: ${group}`);
|
|
35
|
+
console.log(` Type: ${valueType}`);
|
|
36
|
+
console.log(` Hidden: ${isHidden}`);
|
|
37
|
+
}
|
|
38
|
+
// Get access token and create client
|
|
39
|
+
const accessToken = await getValidAccessToken(selectedCustomer);
|
|
40
|
+
const client = await makeClient(verbose, accessToken);
|
|
41
|
+
// Create attribute on NEWO platform
|
|
42
|
+
const createAttributeRequest = {
|
|
43
|
+
idn,
|
|
44
|
+
value,
|
|
45
|
+
title,
|
|
46
|
+
description,
|
|
47
|
+
group,
|
|
48
|
+
is_hidden: isHidden,
|
|
49
|
+
possible_values: possibleValues,
|
|
50
|
+
value_type: valueType
|
|
51
|
+
};
|
|
52
|
+
const createResponse = await createCustomerAttribute(client, createAttributeRequest);
|
|
53
|
+
console.log(`✅ Customer attribute created: ${idn} (ID: ${createResponse.id})`);
|
|
54
|
+
console.log(` Title: ${title}`);
|
|
55
|
+
console.log(` Value: ${value}`);
|
|
56
|
+
console.log(` Group: ${group}`);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.error('❌ Failed to create customer attribute:', error instanceof Error ? error.message : String(error));
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=create-attribute.js.map
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create Flow Event Command Handler
|
|
3
|
+
*/
|
|
4
|
+
import { makeClient, createFlowEvent } from '../../api.js';
|
|
5
|
+
import { getValidAccessToken } from '../../auth.js';
|
|
6
|
+
import { requireSingleCustomer } from '../customer-selection.js';
|
|
7
|
+
export async function handleCreateEventCommand(customerConfig, args, verbose = false) {
|
|
8
|
+
try {
|
|
9
|
+
const selectedCustomer = requireSingleCustomer(customerConfig, args.customer);
|
|
10
|
+
// Parse arguments
|
|
11
|
+
const idn = args._[1];
|
|
12
|
+
const flowId = args.flow;
|
|
13
|
+
const skillIdn = args.skill;
|
|
14
|
+
const description = args.description || '';
|
|
15
|
+
const skillSelector = args['skill-selector'] || 'skill_idn';
|
|
16
|
+
const interruptMode = args['interrupt-mode'] || 'queue';
|
|
17
|
+
const integrationIdn = args.integration || 'api';
|
|
18
|
+
const connectorIdn = args.connector || 'webhook';
|
|
19
|
+
const stateIdn = args.state;
|
|
20
|
+
if (!idn) {
|
|
21
|
+
console.error('Error: Event IDN is required');
|
|
22
|
+
console.error('Usage: newo create-event <idn> --flow <flow-id> --skill <skill-idn> [--description <desc>] [--skill-selector <selector>] [--interrupt-mode <mode>] [--integration <integration>] [--connector <connector>] [--state <state-idn>]');
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
if (!flowId) {
|
|
26
|
+
console.error('Error: Flow ID is required');
|
|
27
|
+
console.error('Usage: newo create-event <idn> --flow <flow-id> --skill <skill-idn> [options]');
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
if (!skillIdn) {
|
|
31
|
+
console.error('Error: Skill IDN is required');
|
|
32
|
+
console.error('Usage: newo create-event <idn> --flow <flow-id> --skill <skill-idn> [options]');
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
if (verbose) {
|
|
36
|
+
console.log(`📝 Creating event: ${idn}`);
|
|
37
|
+
console.log(` Flow ID: ${flowId}`);
|
|
38
|
+
console.log(` Skill IDN: ${skillIdn}`);
|
|
39
|
+
console.log(` Integration: ${integrationIdn}`);
|
|
40
|
+
console.log(` Connector: ${connectorIdn}`);
|
|
41
|
+
}
|
|
42
|
+
// Get access token and create client
|
|
43
|
+
const accessToken = await getValidAccessToken(selectedCustomer);
|
|
44
|
+
const client = await makeClient(verbose, accessToken);
|
|
45
|
+
// Create event on NEWO platform
|
|
46
|
+
const createEventRequest = {
|
|
47
|
+
idn,
|
|
48
|
+
description,
|
|
49
|
+
skill_selector: skillSelector,
|
|
50
|
+
skill_idn: skillIdn,
|
|
51
|
+
state_idn: stateIdn || null,
|
|
52
|
+
interrupt_mode: interruptMode,
|
|
53
|
+
integration_idn: integrationIdn,
|
|
54
|
+
connector_idn: connectorIdn
|
|
55
|
+
};
|
|
56
|
+
const createResponse = await createFlowEvent(client, flowId, createEventRequest);
|
|
57
|
+
console.log(`✅ Event created: ${idn} (ID: ${createResponse.id})`);
|
|
58
|
+
console.log(` Flow: ${flowId}`);
|
|
59
|
+
console.log(` Triggers skill: ${skillIdn}`);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.error('❌ Failed to create event:', error instanceof Error ? error.message : String(error));
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=create-event.js.map
|