Skip to content

Commit 66983c8

Browse files
committed
- feat: update message types and introduce stable aliases for improved clarity and consistency
- feat: enhance ListBulletins API with pagination support and query parameters
1 parent 96df2b4 commit 66983c8

9 files changed

Lines changed: 1035 additions & 530 deletions

File tree

agent/agent.go

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ func Complete(ctx context.Context, client *sdk.Client, opts CompleteOptions) (*C
142142
apiMessages := make([]types.ConversationCompleteRequestMessage, 0, len(opts.Messages))
143143
for _, msg := range opts.Messages {
144144
apiMessages = append(apiMessages, types.ConversationCompleteRequestMessage{
145-
Type: types.MagentaType(msg.Type),
145+
Type: types.CompleteMessageType(msg.Type),
146146
Text: msg.Text,
147147
Meta: msg.Meta,
148148
})
@@ -230,7 +230,7 @@ func CompleteStream(ctx context.Context, client *sdk.Client, opts CompleteOption
230230
apiMessages := make([]types.ConversationCompleteRequestMessage, 0, len(opts.Messages))
231231
for _, msg := range opts.Messages {
232232
apiMessages = append(apiMessages, types.ConversationCompleteRequestMessage{
233-
Type: types.MagentaType(msg.Type),
233+
Type: types.CompleteMessageType(msg.Type),
234234
Text: msg.Text,
235235
Meta: msg.Meta,
236236
})
@@ -577,25 +577,25 @@ func CompleteWithTools(ctx context.Context, client *sdk.Client, opts CompleteWit
577577
messageFunctions = append(messageFunctions, types.ConversationMessageCompleteRequestFunction{
578578
Name: name,
579579
Description: tool.Description,
580-
Parameters: types.PurpleParameters{
581-
Type: types.PurpleObject,
580+
Parameters: types.MessageCompleteFunctionParameters{
581+
Type: types.MessageCompleteFunctionParametersTypeObject,
582582
Properties: properties,
583583
Required: required,
584584
},
585-
Result: &types.PurpleResult{
585+
Result: &types.MessageCompleteFunctionResult{
586586
Channel: &channel,
587587
},
588588
})
589589
} else {
590590
functions = append(functions, types.ConversationCompleteRequestFunction{
591591
Name: name,
592592
Description: tool.Description,
593-
Parameters: types.IndigoParameters{
594-
Type: types.IndigoObject,
593+
Parameters: types.CompleteFunctionParameters{
594+
Type: types.CompleteFunctionParametersTypeObject,
595595
Properties: properties,
596596
Required: required,
597597
},
598-
Result: &types.IndigoResult{
598+
Result: &types.CompleteFunctionResult{
599599
Channel: &channel,
600600
},
601601
})
@@ -628,7 +628,7 @@ func CompleteWithTools(ctx context.Context, client *sdk.Client, opts CompleteWit
628628
apiMessages := make([]types.ConversationCompleteRequestMessage, 0, len(opts.Messages))
629629
for _, msg := range opts.Messages {
630630
apiMessages = append(apiMessages, types.ConversationCompleteRequestMessage{
631-
Type: types.MagentaType(msg.Type),
631+
Type: types.CompleteMessageType(msg.Type),
632632
Text: msg.Text,
633633
Meta: msg.Meta,
634634
})
@@ -1259,17 +1259,17 @@ func convertMessageExtensions(extensions *types.ConversationCompleteRequestExten
12591259
}
12601260

12611261
if len(extensions.Datasets) > 0 {
1262-
result.Datasets = make([]types.PurpleDataset, 0, len(extensions.Datasets))
1262+
result.Datasets = make([]types.MessageCompleteDataset, 0, len(extensions.Datasets))
12631263
for _, dataset := range extensions.Datasets {
1264-
converted := types.PurpleDataset{
1264+
converted := types.MessageCompleteDataset{
12651265
Description: dataset.Description,
12661266
Name: dataset.Name,
12671267
}
12681268

12691269
if len(dataset.Records) > 0 {
1270-
converted.Records = make([]types.PurpleRecord, 0, len(dataset.Records))
1270+
converted.Records = make([]types.MessageCompleteRecord, 0, len(dataset.Records))
12711271
for _, record := range dataset.Records {
1272-
converted.Records = append(converted.Records, types.PurpleRecord{
1272+
converted.Records = append(converted.Records, types.MessageCompleteRecord{
12731273
Meta: record.Meta,
12741274
Text: record.Text,
12751275
})
@@ -1281,27 +1281,27 @@ func convertMessageExtensions(extensions *types.ConversationCompleteRequestExten
12811281
}
12821282

12831283
if len(extensions.Features) > 0 {
1284-
result.Features = make([]types.PurpleFeature, 0, len(extensions.Features))
1284+
result.Features = make([]types.MessageCompleteFeature, 0, len(extensions.Features))
12851285
for _, feature := range extensions.Features {
1286-
result.Features = append(result.Features, types.PurpleFeature{
1286+
result.Features = append(result.Features, types.MessageCompleteFeature{
12871287
Name: feature.Name,
12881288
Options: feature.Options,
12891289
})
12901290
}
12911291
}
12921292

12931293
if len(extensions.Skillsets) > 0 {
1294-
result.Skillsets = make([]types.PurpleSkillset, 0, len(extensions.Skillsets))
1294+
result.Skillsets = make([]types.MessageCompleteSkillset, 0, len(extensions.Skillsets))
12951295
for _, skillset := range extensions.Skillsets {
1296-
converted := types.PurpleSkillset{
1296+
converted := types.MessageCompleteSkillset{
12971297
Description: skillset.Description,
12981298
Name: skillset.Name,
12991299
}
13001300

13011301
if len(skillset.Abilities) > 0 {
1302-
converted.Abilities = make([]types.PurpleAbility, 0, len(skillset.Abilities))
1302+
converted.Abilities = make([]types.MessageCompleteAbility, 0, len(skillset.Abilities))
13031303
for _, ability := range skillset.Abilities {
1304-
converted.Abilities = append(converted.Abilities, types.PurpleAbility{
1304+
converted.Abilities = append(converted.Abilities, types.MessageCompleteAbility{
13051305
Description: ability.Description,
13061306
Instruction: ability.Instruction,
13071307
Meta: ability.Meta,

agent/agent_internal_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,20 +53,20 @@ func TestConvertMessageExtensions(t *testing.T) {
5353

5454
extensions := &types.ConversationCompleteRequestExtensions{
5555
Backstory: &backstory,
56-
Datasets: []types.IndigoDataset{{
56+
Datasets: []types.CompleteDataset{{
5757
Name: &datasetName,
58-
Records: []types.IndigoRecord{{
58+
Records: []types.CompleteRecord{{
5959
Text: "A record",
6060
Meta: map[string]interface{}{"source": "test"},
6161
}},
6262
}},
63-
Features: []types.IndigoFeature{{
63+
Features: []types.CompleteFeature{{
6464
Name: "skills",
6565
Options: map[string]interface{}{"enabled": true},
6666
}},
67-
Skillsets: []types.IndigoSkillset{{
67+
Skillsets: []types.CompleteSkillset{{
6868
Name: &skillsetName,
69-
Abilities: []types.IndigoAbility{{
69+
Abilities: []types.CompleteAbility{{
7070
Name: "lookup",
7171
Description: "Look something up",
7272
Instruction: "Search the knowledge base",

examples/agent-with-embedded-skills/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ Call the exit function when done.`
106106
Tools: tools,
107107
MaxIterations: 20,
108108
Extensions: &types.ConversationCompleteRequestExtensions{
109-
Features: []types.IndigoFeature{
109+
Features: []types.CompleteFeature{
110110
{
111111
Name: skillsFeature["name"].(string),
112112
Options: skillsFeature["options"].(map[string]interface{}),

examples/chatbot/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ func main() {
7979

8080
// Add user message to history
8181
messages = append(messages, types.ConversationCompleteRequestMessage{
82-
Type: types.HilariousUser,
82+
Type: types.CompleteMessageRoleUser,
8383
Text: userInput,
8484
})
8585

@@ -114,7 +114,7 @@ func main() {
114114

115115
// Add bot response to history
116116
messages = append(messages, types.ConversationCompleteRequestMessage{
117-
Type: types.HilariousBot,
117+
Type: types.CompleteMessageRoleBot,
118118
Text: responseText.String(),
119119
})
120120

examples/portable-embedded-agent/main.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ func runPortableAgent(
129129
client *sdk.Client,
130130
conversationID string,
131131
task string,
132-
skillsFeature types.IndigoFeature,
132+
skillsFeature types.CompleteFeature,
133133
) error {
134134
backstory := strings.TrimSpace(`
135135
You are a portable ChatBotKit agent running from a self-contained Go executable.
@@ -149,7 +149,7 @@ When the task is complete, call the exit tool with code 0.
149149
Tools: tools,
150150
MaxIterations: 20,
151151
Extensions: &types.ConversationCompleteRequestExtensions{
152-
Features: []types.IndigoFeature{skillsFeature},
152+
Features: []types.CompleteFeature{skillsFeature},
153153
},
154154
})
155155

@@ -199,20 +199,20 @@ func loadEmbeddedSkills() ([]agent.SkillDefinition, error) {
199199
return result.GetSkills(), nil
200200
}
201201

202-
func createSkillsFeature(skills []agent.SkillDefinition) (types.IndigoFeature, error) {
202+
func createSkillsFeature(skills []agent.SkillDefinition) (types.CompleteFeature, error) {
203203
featureMap := agent.CreateSkillsFeature(skills)
204204

205205
name, ok := featureMap["name"].(string)
206206
if !ok || name == "" {
207-
return types.IndigoFeature{}, errors.New("skills feature is missing name")
207+
return types.CompleteFeature{}, errors.New("skills feature is missing name")
208208
}
209209

210210
options, ok := featureMap["options"].(map[string]interface{})
211211
if !ok {
212-
return types.IndigoFeature{}, errors.New("skills feature is missing options")
212+
return types.CompleteFeature{}, errors.New("skills feature is missing options")
213213
}
214214

215-
return types.IndigoFeature{
215+
return types.CompleteFeature{
216216
Name: name,
217217
Options: options,
218218
}, nil

examples/stateful-agent/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,12 +173,12 @@ func main() {
173173
fmt.Println("\n---")
174174
fmt.Println("Final persisted conversation:")
175175
for _, message := range messages.Items {
176-
if message.Type != types.IndecentUser && message.Type != types.IndecentBot {
176+
if message.Type != types.MessageItemRoleUser && message.Type != types.MessageItemRoleBot {
177177
continue
178178
}
179179

180180
prefix := "User"
181-
if message.Type == types.IndecentBot {
181+
if message.Type == types.MessageItemRoleBot {
182182
prefix = "Bot"
183183
}
184184

sdk/blueprint.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,30 @@ func (c *BlueprintClient) ListResources(ctx context.Context, blueprintID string)
9999
}
100100
return &result, nil
101101
}
102+
103+
// ListBulletins lists the bulletins on a blueprint's shared board.
104+
func (c *BlueprintClient) ListBulletins(ctx context.Context, blueprintID string, opts *types.BlueprintBulletinListParams) (*types.BlueprintBulletinListResponse, error) {
105+
path := fmt.Sprintf("/api/v1/blueprint/%s/bulletin/list", blueprintID)
106+
107+
query := url.Values{}
108+
if opts != nil {
109+
query = params.BuildListQuery(opts.Cursor, opts.Order, opts.Take, nil)
110+
}
111+
112+
var result types.BlueprintBulletinListResponse
113+
if err := c.httpClient.Get(ctx, path, query, &result); err != nil {
114+
return nil, err
115+
}
116+
return &result, nil
117+
}
118+
119+
// CreateBulletin posts a bulletin to a blueprint's shared board.
120+
func (c *BlueprintClient) CreateBulletin(ctx context.Context, blueprintID string, req types.BlueprintBulletinCreateRequest) (*types.BlueprintBulletinCreateResponse, error) {
121+
path := fmt.Sprintf("/api/v1/blueprint/%s/bulletin/create", blueprintID)
122+
123+
var result types.BlueprintBulletinCreateResponse
124+
if err := c.httpClient.Post(ctx, path, req, &result); err != nil {
125+
return nil, err
126+
}
127+
return &result, nil
128+
}

types/aliases.go

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package types
2+
3+
// This file provides hand-maintained, stable aliases for generated type names.
4+
//
5+
// The generated types in this package (types.go) are produced by quicktype,
6+
// which assigns arbitrary, order-dependent names (e.g. "FriskyType",
7+
// "IndecentFeature") to anonymous nested objects and enums in the OpenAPI spec.
8+
// Those names change whenever endpoints are added or reordered, which would
9+
// otherwise break every consumer that references them.
10+
//
11+
// Reference the stable aliases below instead of the raw generated names. When
12+
// types.go is regenerated and a referenced name changes, update ONLY the
13+
// right-hand sides in this file - every consumer keeps using the unchanged
14+
// left-hand names.
15+
//
16+
// This file is hand-maintained and is NOT overwritten by `script:sync-types:go`
17+
// (which only writes types.go).
18+
19+
// --- Conversation complete request message role ---
20+
21+
// CompleteMessageType is the role of a message sent in a conversation complete
22+
// request.
23+
type CompleteMessageType = FriskyType
24+
25+
const (
26+
// CompleteMessageRoleUser marks a sent message authored by the end user.
27+
CompleteMessageRoleUser = AmbitiousUser
28+
// CompleteMessageRoleBot marks a sent message authored by the bot.
29+
CompleteMessageRoleBot = AmbitiousBot
30+
)
31+
32+
// --- Conversation message list item role ---
33+
34+
// MessageItemType is the role of a message returned from a conversation message
35+
// listing.
36+
type MessageItemType = IndecentType
37+
38+
const (
39+
// MessageItemRoleUser marks a listed message authored by the end user.
40+
MessageItemRoleUser = IndecentUser
41+
// MessageItemRoleBot marks a listed message authored by the bot.
42+
MessageItemRoleBot = IndecentBot
43+
)
44+
45+
// --- Conversation complete request (stateful) extensions ---
46+
47+
type (
48+
// CompleteDataset is an inline dataset on a conversation complete request.
49+
CompleteDataset = IndecentDataset
50+
// CompleteRecord is a record within a CompleteDataset.
51+
CompleteRecord = IndecentRecord
52+
// CompleteFeature is an inline feature on a conversation complete request.
53+
CompleteFeature = IndecentFeature
54+
// CompleteSkillset is an inline skillset on a conversation complete request.
55+
CompleteSkillset = IndecentSkillset
56+
// CompleteAbility is an ability within a CompleteSkillset.
57+
CompleteAbility = IndecentAbility
58+
)
59+
60+
// --- Conversation complete request (stateful) functions ---
61+
62+
type (
63+
// CompleteFunctionParameters is the JSON-schema parameters of a function on
64+
// a conversation complete request.
65+
CompleteFunctionParameters = IndigoParameters
66+
// CompleteFunctionResult is the result configuration of a function on a
67+
// conversation complete request.
68+
CompleteFunctionResult = IndigoResult
69+
)
70+
71+
// CompleteFunctionParametersTypeObject is the "object" value of a function
72+
// parameters schema type on a conversation complete request.
73+
const CompleteFunctionParametersTypeObject = IndigoObject
74+
75+
// --- Conversation message complete request (stateless) extensions ---
76+
77+
type (
78+
// MessageCompleteDataset is an inline dataset on a conversation message
79+
// complete request.
80+
MessageCompleteDataset = PurpleDataset
81+
// MessageCompleteRecord is a record within a MessageCompleteDataset.
82+
MessageCompleteRecord = PurpleRecord
83+
// MessageCompleteFeature is an inline feature on a conversation message
84+
// complete request.
85+
MessageCompleteFeature = PurpleFeature
86+
// MessageCompleteSkillset is an inline skillset on a conversation message
87+
// complete request.
88+
MessageCompleteSkillset = PurpleSkillset
89+
// MessageCompleteAbility is an ability within a MessageCompleteSkillset.
90+
MessageCompleteAbility = PurpleAbility
91+
)
92+
93+
// --- Conversation message complete request (stateless) functions ---
94+
95+
type (
96+
// MessageCompleteFunctionParameters is the JSON-schema parameters of a
97+
// function on a conversation message complete request.
98+
MessageCompleteFunctionParameters = PurpleParameters
99+
// MessageCompleteFunctionResult is the result configuration of a function
100+
// on a conversation message complete request.
101+
MessageCompleteFunctionResult = PurpleResult
102+
)
103+
104+
// MessageCompleteFunctionParametersTypeObject is the "object" value of a
105+
// function parameters schema type on a conversation message complete request.
106+
const MessageCompleteFunctionParametersTypeObject = PurpleObject

0 commit comments

Comments
 (0)