agentlaunch-templates 0.4.3 → 0.4.5
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/__tests__/build.test.d.ts +1 -1
- package/dist/__tests__/build.test.js +5 -5
- package/dist/__tests__/build.test.js.map +1 -1
- package/dist/__tests__/consumer-commerce.test.d.ts +11 -0
- package/dist/__tests__/consumer-commerce.test.d.ts.map +1 -0
- package/dist/__tests__/consumer-commerce.test.js +118 -0
- package/dist/__tests__/consumer-commerce.test.js.map +1 -0
- package/dist/__tests__/gaps.test.d.ts +11 -0
- package/dist/__tests__/gaps.test.d.ts.map +1 -0
- package/dist/__tests__/gaps.test.js +196 -0
- package/dist/__tests__/gaps.test.js.map +1 -0
- package/dist/__tests__/per-template.test.d.ts +8 -0
- package/dist/__tests__/per-template.test.d.ts.map +1 -0
- package/dist/__tests__/per-template.test.js +213 -0
- package/dist/__tests__/per-template.test.js.map +1 -0
- package/dist/__tests__/{genesis-integration.test.d.ts → swarm-starter-integration.test.d.ts} +2 -2
- package/dist/__tests__/swarm-starter-integration.test.d.ts.map +1 -0
- package/dist/__tests__/{genesis-integration.test.js → swarm-starter-integration.test.js} +24 -24
- package/dist/__tests__/swarm-starter-integration.test.js.map +1 -0
- package/dist/__tests__/{genesis.test.d.ts → swarm-starter.test.d.ts} +6 -6
- package/dist/__tests__/swarm-starter.test.d.ts.map +1 -0
- package/dist/__tests__/{genesis.test.js → swarm-starter.test.js} +71 -73
- package/dist/__tests__/swarm-starter.test.js.map +1 -0
- package/dist/claude-context.d.ts +1 -1
- package/dist/claude-context.d.ts.map +1 -1
- package/dist/claude-context.js +55 -49
- package/dist/claude-context.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/people.d.ts +108 -0
- package/dist/people.d.ts.map +1 -0
- package/dist/people.js +564 -0
- package/dist/people.js.map +1 -0
- package/dist/presets.d.ts +13 -13
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +331 -96
- package/dist/presets.js.map +1 -1
- package/dist/registry.d.ts +3 -8
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +8 -28
- package/dist/registry.js.map +1 -1
- package/dist/templates/chat-memory.d.ts.map +1 -1
- package/dist/templates/chat-memory.js +9 -2
- package/dist/templates/chat-memory.js.map +1 -1
- package/dist/templates/consumer-commerce.d.ts +14 -0
- package/dist/templates/consumer-commerce.d.ts.map +1 -0
- package/dist/templates/consumer-commerce.js +439 -0
- package/dist/templates/consumer-commerce.js.map +1 -0
- package/dist/templates/custom.d.ts.map +1 -1
- package/dist/templates/custom.js +9 -2
- package/dist/templates/custom.js.map +1 -1
- package/dist/templates/data-analyzer.d.ts.map +1 -1
- package/dist/templates/data-analyzer.js +9 -2
- package/dist/templates/data-analyzer.js.map +1 -1
- package/dist/templates/gifter.d.ts.map +1 -1
- package/dist/templates/gifter.js +9 -2
- package/dist/templates/gifter.js.map +1 -1
- package/dist/templates/price-monitor.d.ts.map +1 -1
- package/dist/templates/price-monitor.js +9 -2
- package/dist/templates/price-monitor.js.map +1 -1
- package/dist/templates/research.d.ts.map +1 -1
- package/dist/templates/research.js +9 -2
- package/dist/templates/research.js.map +1 -1
- package/dist/templates/{genesis.d.ts → swarm-starter.d.ts} +2 -2
- package/dist/templates/swarm-starter.d.ts.map +1 -0
- package/dist/templates/{genesis.js → swarm-starter.js} +154 -42
- package/dist/templates/swarm-starter.js.map +1 -0
- package/dist/templates/trading-bot.d.ts.map +1 -1
- package/dist/templates/trading-bot.js +9 -2
- package/dist/templates/trading-bot.js.map +1 -1
- package/package.json +3 -2
- package/dist/__tests__/genesis-integration.test.d.ts.map +0 -1
- package/dist/__tests__/genesis-integration.test.js.map +0 -1
- package/dist/__tests__/genesis.test.d.ts.map +0 -1
- package/dist/__tests__/genesis.test.js.map +0 -1
- package/dist/templates/genesis.d.ts.map +0 -1
- package/dist/templates/genesis.js.map +0 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tests for
|
|
2
|
+
* Tests for Swarm-starter template and Presets system — TST-01
|
|
3
3
|
*
|
|
4
4
|
* Verifies:
|
|
5
|
-
* -
|
|
6
|
-
* - All 7 presets generate valid code via generateFromTemplate("
|
|
5
|
+
* - Swarm-starter template generates valid output with basic variables
|
|
6
|
+
* - All 7 presets generate valid code via generateFromTemplate("swarm-starter", ...)
|
|
7
7
|
* - Variable substitution replaces all expected placeholders
|
|
8
8
|
* - Generated code contains required markers and imports
|
|
9
9
|
* - Commerce layers (PaymentService, PricingTable, TierManager) present
|
|
10
10
|
* - Strict mode throws on missing required variables
|
|
11
11
|
* - Default values are used when only agent_name is provided
|
|
12
|
-
* - getTemplate("
|
|
13
|
-
* - listTemplates() includes
|
|
12
|
+
* - getTemplate("swarm-starter") returns the template metadata
|
|
13
|
+
* - listTemplates() includes swarm-starter and it is first in the list
|
|
14
14
|
*/
|
|
15
15
|
import { describe, it } from 'node:test';
|
|
16
16
|
import assert from 'node:assert/strict';
|
|
@@ -21,43 +21,43 @@ import { getPreset, listPresets } from '../presets.js';
|
|
|
21
21
|
// Constants
|
|
22
22
|
// ---------------------------------------------------------------------------
|
|
23
23
|
const PRESET_NAMES = [
|
|
24
|
-
'
|
|
25
|
-
'
|
|
26
|
-
'
|
|
27
|
-
'
|
|
28
|
-
'
|
|
29
|
-
'
|
|
30
|
-
'
|
|
24
|
+
'writer',
|
|
25
|
+
'social',
|
|
26
|
+
'community',
|
|
27
|
+
'analytics',
|
|
28
|
+
'outreach',
|
|
29
|
+
'ads',
|
|
30
|
+
'strategy',
|
|
31
31
|
];
|
|
32
32
|
// ---------------------------------------------------------------------------
|
|
33
|
-
//
|
|
33
|
+
// Swarm-starter template registration
|
|
34
34
|
// ---------------------------------------------------------------------------
|
|
35
|
-
describe('
|
|
36
|
-
it('getTemplate("
|
|
37
|
-
const tpl = getTemplate('
|
|
38
|
-
assert.ok(tpl, '
|
|
39
|
-
assert.equal(tpl.name, '
|
|
35
|
+
describe('Swarm-starter template — registration', () => {
|
|
36
|
+
it('getTemplate("swarm-starter") returns a valid template object', () => {
|
|
37
|
+
const tpl = getTemplate('swarm-starter');
|
|
38
|
+
assert.ok(tpl, 'swarm-starter template should exist in the registry');
|
|
39
|
+
assert.equal(tpl.name, 'swarm-starter');
|
|
40
40
|
assert.ok(tpl.description, 'template should have a description');
|
|
41
41
|
assert.ok(tpl.category, 'template should have a category');
|
|
42
42
|
assert.ok(Array.isArray(tpl.variables), 'template should have variables array');
|
|
43
43
|
assert.ok(typeof tpl.code === 'string', 'template should have code string');
|
|
44
44
|
});
|
|
45
|
-
it('listTemplates() includes
|
|
45
|
+
it('listTemplates() includes swarm-starter', () => {
|
|
46
46
|
const templates = listTemplates();
|
|
47
47
|
const names = templates.map((t) => t.name);
|
|
48
|
-
assert.ok(names.includes('
|
|
48
|
+
assert.ok(names.includes('swarm-starter'), `swarm-starter should be in list: ${names.join(', ')}`);
|
|
49
49
|
});
|
|
50
|
-
it('
|
|
50
|
+
it('chat-memory is first in the template list (default)', () => {
|
|
51
51
|
const templates = listTemplates();
|
|
52
|
-
assert.equal(templates[0].name, '
|
|
52
|
+
assert.equal(templates[0].name, 'chat-memory', `First template should be chat-memory (default), got: ${templates[0].name}`);
|
|
53
53
|
});
|
|
54
54
|
});
|
|
55
55
|
// ---------------------------------------------------------------------------
|
|
56
56
|
// Basic generation
|
|
57
57
|
// ---------------------------------------------------------------------------
|
|
58
|
-
describe('
|
|
58
|
+
describe('Swarm-starter template — basic generation', () => {
|
|
59
59
|
it('generates valid output with agent_name', () => {
|
|
60
|
-
const result = generateFromTemplate('
|
|
60
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
61
61
|
agent_name: 'TestAgent',
|
|
62
62
|
});
|
|
63
63
|
assert.ok(result.code, 'should produce code');
|
|
@@ -68,7 +68,7 @@ describe('Genesis template — basic generation', () => {
|
|
|
68
68
|
assert.ok(result.agentlaunchConfig, 'should produce agentlaunchConfig');
|
|
69
69
|
});
|
|
70
70
|
it('code output is non-empty Python', () => {
|
|
71
|
-
const result = generateFromTemplate('
|
|
71
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
72
72
|
agent_name: 'TestAgent',
|
|
73
73
|
});
|
|
74
74
|
assert.ok(result.code.length > 100, 'code should be substantial');
|
|
@@ -76,52 +76,52 @@ describe('Genesis template — basic generation', () => {
|
|
|
76
76
|
assert.ok(result.code.includes('from uagents import Agent, Context'), 'code should contain uagents import');
|
|
77
77
|
});
|
|
78
78
|
it('readme mentions the agent name', () => {
|
|
79
|
-
const result = generateFromTemplate('
|
|
80
|
-
agent_name: '
|
|
79
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
80
|
+
agent_name: 'MySwarmBot',
|
|
81
81
|
});
|
|
82
|
-
assert.ok(result.readme.includes('
|
|
82
|
+
assert.ok(result.readme.includes('MySwarmBot'), 'readme should mention agent_name');
|
|
83
83
|
});
|
|
84
84
|
it('envExample lists required environment variables', () => {
|
|
85
|
-
const result = generateFromTemplate('
|
|
85
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
86
86
|
agent_name: 'TestAgent',
|
|
87
87
|
});
|
|
88
88
|
assert.ok(result.envExample.includes('AGENTVERSE_API_KEY'), 'envExample should include AGENTVERSE_API_KEY');
|
|
89
89
|
});
|
|
90
|
-
it('agentlaunchConfig references the
|
|
91
|
-
const result = generateFromTemplate('
|
|
90
|
+
it('agentlaunchConfig references the swarm-starter template', () => {
|
|
91
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
92
92
|
agent_name: 'TestAgent',
|
|
93
93
|
});
|
|
94
94
|
const config = JSON.parse(result.agentlaunchConfig);
|
|
95
|
-
assert.equal(config.template, '
|
|
95
|
+
assert.equal(config.template, 'swarm-starter', 'config should reference swarm-starter template');
|
|
96
96
|
});
|
|
97
97
|
});
|
|
98
98
|
// ---------------------------------------------------------------------------
|
|
99
99
|
// Variable substitution
|
|
100
100
|
// ---------------------------------------------------------------------------
|
|
101
|
-
describe('
|
|
101
|
+
describe('Swarm-starter template — variable substitution', () => {
|
|
102
102
|
it('replaces {{agent_name}} in the code', () => {
|
|
103
|
-
const result = generateFromTemplate('
|
|
104
|
-
agent_name: '
|
|
103
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
104
|
+
agent_name: 'AlphaWriter',
|
|
105
105
|
});
|
|
106
|
-
assert.ok(result.code.includes('
|
|
106
|
+
assert.ok(result.code.includes('AlphaWriter'), 'code should contain the agent name');
|
|
107
107
|
assert.ok(!result.code.includes('{{agent_name}}'), 'code should not contain raw {{agent_name}} placeholder');
|
|
108
108
|
});
|
|
109
109
|
it('replaces {{description}} in the code', () => {
|
|
110
|
-
const result = generateFromTemplate('
|
|
110
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
111
111
|
agent_name: 'TestBot',
|
|
112
112
|
description: 'A custom description for testing',
|
|
113
113
|
});
|
|
114
114
|
assert.ok(result.code.includes('A custom description for testing'), 'code should contain the description');
|
|
115
115
|
});
|
|
116
116
|
it('replaces {{role}} in the code', () => {
|
|
117
|
-
const result = generateFromTemplate('
|
|
117
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
118
118
|
agent_name: 'TestBot',
|
|
119
|
-
role: '
|
|
119
|
+
role: 'content-writer',
|
|
120
120
|
});
|
|
121
|
-
assert.ok(result.code.includes('
|
|
121
|
+
assert.ok(result.code.includes('content-writer'), 'code should contain the role');
|
|
122
122
|
});
|
|
123
123
|
it('replaces {{service_price_afet}} in the code', () => {
|
|
124
|
-
const result = generateFromTemplate('
|
|
124
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
125
125
|
agent_name: 'TestBot',
|
|
126
126
|
service_price_afet: '5000000000000000',
|
|
127
127
|
});
|
|
@@ -131,33 +131,33 @@ describe('Genesis template — variable substitution', () => {
|
|
|
131
131
|
// ---------------------------------------------------------------------------
|
|
132
132
|
// Required code markers
|
|
133
133
|
// ---------------------------------------------------------------------------
|
|
134
|
-
describe('
|
|
134
|
+
describe('Swarm-starter template — required code markers', () => {
|
|
135
135
|
it('contains YOUR SWARM LOGIC marker', () => {
|
|
136
|
-
const result = generateFromTemplate('
|
|
136
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
137
137
|
agent_name: 'TestBot',
|
|
138
138
|
});
|
|
139
139
|
assert.ok(result.code.includes('YOUR SWARM LOGIC'), 'code should contain YOUR SWARM LOGIC marker for customization');
|
|
140
140
|
});
|
|
141
141
|
it('contains required uagents import', () => {
|
|
142
|
-
const result = generateFromTemplate('
|
|
142
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
143
143
|
agent_name: 'TestBot',
|
|
144
144
|
});
|
|
145
145
|
assert.ok(result.code.includes('from uagents import Agent, Context'), 'code should import Agent and Context from uagents');
|
|
146
146
|
});
|
|
147
147
|
it('contains ChatAcknowledgement handler', () => {
|
|
148
|
-
const result = generateFromTemplate('
|
|
148
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
149
149
|
agent_name: 'TestBot',
|
|
150
150
|
});
|
|
151
151
|
assert.ok(result.code.includes('ChatAcknowledgement'), 'code should include ChatAcknowledgement handler');
|
|
152
152
|
});
|
|
153
153
|
it('contains publish_manifest=True', () => {
|
|
154
|
-
const result = generateFromTemplate('
|
|
154
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
155
155
|
agent_name: 'TestBot',
|
|
156
156
|
});
|
|
157
157
|
assert.ok(result.code.includes('publish_manifest=True'), 'code should include publish_manifest=True in agent.include()');
|
|
158
158
|
});
|
|
159
159
|
it('uses datetime.now() not datetime.utcnow()', () => {
|
|
160
|
-
const result = generateFromTemplate('
|
|
160
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
161
161
|
agent_name: 'TestBot',
|
|
162
162
|
});
|
|
163
163
|
// Should use datetime.now()
|
|
@@ -169,27 +169,27 @@ describe('Genesis template — required code markers', () => {
|
|
|
169
169
|
// ---------------------------------------------------------------------------
|
|
170
170
|
// Commerce layers
|
|
171
171
|
// ---------------------------------------------------------------------------
|
|
172
|
-
describe('
|
|
172
|
+
describe('Swarm-starter template — commerce layers', () => {
|
|
173
173
|
it('contains PaymentService', () => {
|
|
174
|
-
const result = generateFromTemplate('
|
|
174
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
175
175
|
agent_name: 'TestBot',
|
|
176
176
|
});
|
|
177
177
|
assert.ok(result.code.includes('PaymentService'), 'code should include PaymentService class');
|
|
178
178
|
});
|
|
179
179
|
it('contains PricingTable', () => {
|
|
180
|
-
const result = generateFromTemplate('
|
|
180
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
181
181
|
agent_name: 'TestBot',
|
|
182
182
|
});
|
|
183
183
|
assert.ok(result.code.includes('PricingTable'), 'code should include PricingTable class');
|
|
184
184
|
});
|
|
185
185
|
it('contains TierManager', () => {
|
|
186
|
-
const result = generateFromTemplate('
|
|
186
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
187
187
|
agent_name: 'TestBot',
|
|
188
188
|
});
|
|
189
189
|
assert.ok(result.code.includes('TierManager'), 'code should include TierManager class');
|
|
190
190
|
});
|
|
191
191
|
it('contains RevenueTracker', () => {
|
|
192
|
-
const result = generateFromTemplate('
|
|
192
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
193
193
|
agent_name: 'TestBot',
|
|
194
194
|
});
|
|
195
195
|
assert.ok(result.code.includes('RevenueTracker'), 'code should include RevenueTracker for GDP tracking');
|
|
@@ -198,15 +198,15 @@ describe('Genesis template — commerce layers', () => {
|
|
|
198
198
|
// ---------------------------------------------------------------------------
|
|
199
199
|
// Strict mode
|
|
200
200
|
// ---------------------------------------------------------------------------
|
|
201
|
-
describe('
|
|
201
|
+
describe('Swarm-starter template — strict mode', () => {
|
|
202
202
|
it('throws when strict is true and agent_name is missing', () => {
|
|
203
|
-
assert.throws(() => generateFromTemplate('
|
|
203
|
+
assert.throws(() => generateFromTemplate('swarm-starter', {}, { variables: {}, strict: true }), /agent_name/i, 'should throw mentioning agent_name');
|
|
204
204
|
});
|
|
205
205
|
it('does not throw when strict is false and agent_name is missing', () => {
|
|
206
|
-
assert.doesNotThrow(() => generateFromTemplate('
|
|
206
|
+
assert.doesNotThrow(() => generateFromTemplate('swarm-starter', {}, { variables: {}, strict: false }), 'should not throw in non-strict mode');
|
|
207
207
|
});
|
|
208
208
|
it('leaves placeholder when strict is false and required var is missing', () => {
|
|
209
|
-
const result = generateFromTemplate('
|
|
209
|
+
const result = generateFromTemplate('swarm-starter', {}, { variables: {}, strict: false });
|
|
210
210
|
// The unresolved placeholder should remain
|
|
211
211
|
assert.ok(result.code.includes('{{agent_name}}'), 'unresolved placeholder should remain in non-strict mode');
|
|
212
212
|
});
|
|
@@ -214,9 +214,9 @@ describe('Genesis template — strict mode', () => {
|
|
|
214
214
|
// ---------------------------------------------------------------------------
|
|
215
215
|
// Default values
|
|
216
216
|
// ---------------------------------------------------------------------------
|
|
217
|
-
describe('
|
|
217
|
+
describe('Swarm-starter template — default values', () => {
|
|
218
218
|
it('uses default values when only agent_name is provided', () => {
|
|
219
|
-
const result = generateFromTemplate('
|
|
219
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
220
220
|
agent_name: 'MinimalAgent',
|
|
221
221
|
});
|
|
222
222
|
// Code should be valid (no raw {{...}} placeholders for defaulted vars)
|
|
@@ -251,7 +251,7 @@ describe('Presets — listPresets()', () => {
|
|
|
251
251
|
assert.ok(typeof preset.variables === 'object', `preset ${preset.name} variables should be an object`);
|
|
252
252
|
}
|
|
253
253
|
});
|
|
254
|
-
it('includes all 7
|
|
254
|
+
it('includes all 7 marketing team presets', () => {
|
|
255
255
|
const presets = listPresets();
|
|
256
256
|
const presetNames = presets.map((p) => p.name);
|
|
257
257
|
for (const expected of PRESET_NAMES) {
|
|
@@ -271,30 +271,28 @@ describe('Presets — getPreset()', () => {
|
|
|
271
271
|
const preset = getPreset('nonexistent-preset-xyz');
|
|
272
272
|
assert.equal(preset, undefined, 'unknown preset should return undefined');
|
|
273
273
|
});
|
|
274
|
-
it('
|
|
275
|
-
const
|
|
276
|
-
assert.ok(
|
|
277
|
-
assert.ok(
|
|
278
|
-
assert.ok(
|
|
279
|
-
assert.ok(
|
|
280
|
-
assert.ok(
|
|
281
|
-
assert.ok(
|
|
274
|
+
it('writer preset has expected structure', () => {
|
|
275
|
+
const writer = getPreset('writer');
|
|
276
|
+
assert.ok(writer, 'writer preset should exist');
|
|
277
|
+
assert.ok(writer.displayName, 'writer should have displayName');
|
|
278
|
+
assert.ok(writer.symbol, 'writer should have symbol');
|
|
279
|
+
assert.ok(writer.description, 'writer should have description');
|
|
280
|
+
assert.ok(writer.role, 'writer should have role');
|
|
281
|
+
assert.ok(writer.variables.role, 'writer variables should include role');
|
|
282
282
|
});
|
|
283
283
|
});
|
|
284
284
|
// ---------------------------------------------------------------------------
|
|
285
285
|
// All presets generate valid code
|
|
286
286
|
// ---------------------------------------------------------------------------
|
|
287
|
-
describe('Presets — all presets generate valid
|
|
287
|
+
describe('Presets — all presets generate valid swarm-starter code', () => {
|
|
288
288
|
for (const presetName of PRESET_NAMES) {
|
|
289
|
-
it(`preset "${presetName}" generates valid code from
|
|
289
|
+
it(`preset "${presetName}" generates valid code from swarm-starter template`, () => {
|
|
290
290
|
const preset = getPreset(presetName);
|
|
291
291
|
assert.ok(preset, `preset "${presetName}" should exist`);
|
|
292
|
-
const result = generateFromTemplate('
|
|
292
|
+
const result = generateFromTemplate('swarm-starter', preset.variables);
|
|
293
293
|
// Basic validity checks
|
|
294
294
|
assert.ok(result.code, `${presetName}: should produce code`);
|
|
295
295
|
assert.ok(result.code.length > 100, `${presetName}: code should be substantial`);
|
|
296
|
-
// Should contain the preset's agent name
|
|
297
|
-
assert.ok(result.code.includes(preset.variables.agent_name), `${presetName}: code should contain the agent name "${preset.variables.agent_name}"`);
|
|
298
296
|
// Should have required imports
|
|
299
297
|
assert.ok(result.code.includes('from uagents import'), `${presetName}: code should have uagents import`);
|
|
300
298
|
// No unresolved placeholders
|
|
@@ -309,4 +307,4 @@ describe('Presets — all presets generate valid genesis code', () => {
|
|
|
309
307
|
});
|
|
310
308
|
}
|
|
311
309
|
});
|
|
312
|
-
//# sourceMappingURL=
|
|
310
|
+
//# sourceMappingURL=swarm-starter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarm-starter.test.js","sourceRoot":"","sources":["../../src/__tests__/swarm-starter.test.ts"],"names":[],"mappings":"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"}
|
package/dist/claude-context.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export declare const EXAMPLES: Record<string, string>;
|
|
|
11
11
|
export declare function buildPackageJson(name: string): string;
|
|
12
12
|
export declare function buildClaudeMd(name: string): string;
|
|
13
13
|
export declare const CURSOR_MCP_CONFIG: string;
|
|
14
|
-
export declare const CURSOR_RULES = "# AgentLaunch Agent Project\n\nThis is an AgentLaunch agent project. Use the MCP tools to build, deploy, and tokenize.\n\n## Quick Commands\n\n- `npm run deploy` - Deploy to Agentverse\n- `npm run tokenize` - Create token + handoff link\n- `npm run status` - Check status\n\n## Key Files\n\n- `agent.py` - Your agent code (edit this!)\n- `CLAUDE.md` - Full context for Claude\n- `docs/` - SDK, CLI, MCP documentation\n- `examples/` - Working code samples\n\n##
|
|
14
|
+
export declare const CURSOR_RULES = "# AgentLaunch Agent Project\n\nThis is an AgentLaunch agent project. Use the MCP tools to build, deploy, and tokenize.\n\n## Quick Commands\n\n- `npm run deploy` - Deploy to Agentverse\n- `npm run tokenize` - Create token + handoff link\n- `npm run status` - Check status\n\n## Key Files\n\n- `agent.py` - Your agent code (edit this!)\n- `CLAUDE.md` - Full context for Claude\n- `docs/` - SDK, CLI, MCP documentation\n- `examples/` - Working code samples\n\n## Swarm-Starter Template (Recommended)\n\nUse the swarm-starter template for agents with a full commerce stack:\n- Payment handling, pricing tables, revenue tracking\n- Token-gated tiers, wallet management\n- 7 presets: writer, social, community, analytics, outreach, ads, strategy\n\n## Platform Constants\n\n- Deploy fee: 120 FET\n- Graduation: 30,000 FET liquidity\n- Trading fee: 2% to protocol treasury (NO creator fee)\n";
|
|
15
15
|
export interface SwarmAgent {
|
|
16
16
|
name: string;
|
|
17
17
|
preset: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-context.d.ts","sourceRoot":"","sources":["../src/claude-context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"claude-context.d.ts","sourceRoot":"","sources":["../src/claude-context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkSxC,CAAC;AAMF,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqGzC,CAAC;AAMF,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkJvC,CAAC;AAMF,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkQ3C,CAAC;AAMF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAsBrD;AAMD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgGlD;AAMD,eAAO,MAAM,iBAAiB,QActB,CAAC;AAET,eAAO,MAAM,YAAY,03BA6BxB,CAAC;AAMF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAsQ5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAkB1D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAqB/D;AAMD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CA2CnE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAkCjE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,OAAO,GAAG,MAAM,CAuC3F;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,iBAAiB,EAAE,EAC3B,aAAa,EAAE,OAAO,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWxB"}
|
package/dist/claude-context.js
CHANGED
|
@@ -143,9 +143,9 @@ seller_proto = Protocol(spec=payment_protocol_spec)
|
|
|
143
143
|
buyer_proto = Protocol(spec=payment_protocol_spec)
|
|
144
144
|
\`\`\`
|
|
145
145
|
|
|
146
|
-
## Commerce Layer (
|
|
146
|
+
## Commerce Layer (Swarm-Starter Template)
|
|
147
147
|
|
|
148
|
-
The
|
|
148
|
+
The swarm-starter template includes inline commerce classes:
|
|
149
149
|
- PaymentService: Charge callers, pay other agents
|
|
150
150
|
- PricingTable: Per-service pricing from ctx.storage
|
|
151
151
|
- TierManager: Token-gated access (free/premium)
|
|
@@ -196,40 +196,45 @@ Buyer sends ChatMessage -> Seller sends RequestPayment -> Buyer sends CommitPaym
|
|
|
196
196
|
- Verify tx_hash on-chain before delivering service
|
|
197
197
|
- Store transaction log in ctx.storage
|
|
198
198
|
|
|
199
|
-
##
|
|
199
|
+
## Swarm-Starter Template Commerce Layers
|
|
200
200
|
|
|
201
|
-
The
|
|
201
|
+
The swarm-starter template includes these commerce classes inline:
|
|
202
202
|
- PaymentService, PricingTable, TierManager
|
|
203
203
|
- WalletManager, RevenueTracker, SelfAwareMixin, HoldingsManager
|
|
204
204
|
`,
|
|
205
|
-
"
|
|
205
|
+
"marketing-swarm.md": `# Marketing Team Rules
|
|
206
206
|
|
|
207
207
|
## The 7 Roles
|
|
208
208
|
|
|
209
209
|
| Role | Token | Services | Price/call |
|
|
210
210
|
|------|-------|----------|-----------|
|
|
211
|
-
|
|
|
212
|
-
|
|
|
213
|
-
|
|
|
214
|
-
|
|
|
215
|
-
|
|
|
216
|
-
|
|
|
217
|
-
|
|
|
211
|
+
| Writer | $WRITE | blog_post, tweet_thread, newsletter, ad_copy | 0.01 FET |
|
|
212
|
+
| Social | $POST | post_tweet, schedule_thread, reply_mentions | 0.005 FET |
|
|
213
|
+
| Community | $COMM | moderate, answer_faq, run_poll | 0.002 FET |
|
|
214
|
+
| Analytics | $STATS | engagement_report, audience_insights, content_performance | 0.005 FET |
|
|
215
|
+
| Outreach | $REACH | find_partners, draft_pitch, send_email | 0.01 FET |
|
|
216
|
+
| Ads | $ADS | create_ad, ab_test, campaign_report | 0.01 FET |
|
|
217
|
+
| Strategy | $PLAN | content_calendar, brand_audit, competitor_analysis, campaign_plan | 0.02 FET |
|
|
218
218
|
|
|
219
219
|
## Build Order
|
|
220
220
|
|
|
221
|
-
|
|
221
|
+
Writer -> Community -> Social -> Analytics -> Outreach -> Ads -> Strategy
|
|
222
|
+
|
|
223
|
+
Writer first (everyone needs content), Community second (standalone engagement).
|
|
222
224
|
|
|
223
225
|
## Starter Configurations
|
|
224
226
|
|
|
225
|
-
-
|
|
226
|
-
-
|
|
227
|
-
-
|
|
228
|
-
-
|
|
227
|
+
- Content only: Writer (1 agent)
|
|
228
|
+
- Social presence: Writer + Social (2 agents)
|
|
229
|
+
- Community: Writer + Community + Social (3 agents)
|
|
230
|
+
- Analytics stack: Writer + Social + Analytics (3 agents)
|
|
231
|
+
- Full team: All 7
|
|
229
232
|
|
|
230
233
|
## Cross-Holdings
|
|
231
234
|
|
|
232
235
|
Agents buy each other's tokens for economic alignment.
|
|
236
|
+
- Strategy buys Writer tokens (values its content)
|
|
237
|
+
- Writer buys Analytics tokens (values its performance data)
|
|
233
238
|
|
|
234
239
|
## Token Lifecycle
|
|
235
240
|
|
|
@@ -309,25 +314,26 @@ Build, deploy, and tokenize an agent in one guided flow.
|
|
|
309
314
|
`,
|
|
310
315
|
"build-swarm/SKILL.md": `# /build-swarm — Deploy Agent Swarm
|
|
311
316
|
|
|
312
|
-
Scaffold, deploy, and tokenize a multi-agent swarm with the
|
|
317
|
+
Scaffold, deploy, and tokenize a multi-agent swarm with the swarm-starter template.
|
|
313
318
|
|
|
314
319
|
## Steps
|
|
315
320
|
|
|
316
321
|
1. Ask user what swarm they want (name, roles, purpose)
|
|
317
|
-
2. Show the 7 available presets:
|
|
322
|
+
2. Show the 7 available presets: writer, social, community, analytics, outreach, ads, strategy
|
|
318
323
|
3. Let user pick roles (or suggest a starter configuration)
|
|
319
324
|
4. For each role:
|
|
320
|
-
a. Scaffold from
|
|
325
|
+
a. Scaffold from swarm-starter template with preset variables
|
|
321
326
|
b. Deploy to Agentverse
|
|
322
327
|
c. Tokenize on AgentLaunch
|
|
323
328
|
5. Return handoff links for each agent
|
|
324
329
|
|
|
325
330
|
## Starter Configurations
|
|
326
331
|
|
|
327
|
-
-
|
|
328
|
-
-
|
|
329
|
-
-
|
|
330
|
-
-
|
|
332
|
+
- Content only: Writer (1 agent)
|
|
333
|
+
- Social presence: Writer + Social (2 agents)
|
|
334
|
+
- Community: Writer + Community + Social (3 agents)
|
|
335
|
+
- Analytics stack: Writer + Social + Analytics (3 agents)
|
|
336
|
+
- Full team: All 7
|
|
331
337
|
|
|
332
338
|
## Platform Fees
|
|
333
339
|
- Deploy: 120 FET per agent (paid by human signer)
|
|
@@ -510,7 +516,7 @@ Already configured in \`.claude/settings.json\`.
|
|
|
510
516
|
| Tool | Description |
|
|
511
517
|
|------|-------------|
|
|
512
518
|
| \`scaffold_agent\` | Generate agent code from template |
|
|
513
|
-
| \`
|
|
519
|
+
| \`scaffold_swarm\` | Scaffold agent from swarm-starter preset |
|
|
514
520
|
| \`deploy_to_agentverse\` | Deploy agent |
|
|
515
521
|
| \`create_token_record\` | Create token |
|
|
516
522
|
| \`list_tokens\` | Browse tokens |
|
|
@@ -528,7 +534,7 @@ Already configured in \`.claude/settings.json\`.
|
|
|
528
534
|
- "Deploy my agent to Agentverse"
|
|
529
535
|
- "Tokenize my agent as $MYTOKEN"
|
|
530
536
|
- "Show trending tokens"
|
|
531
|
-
- "Deploy
|
|
537
|
+
- "Deploy a Writer + Social + Analytics swarm"
|
|
532
538
|
- "Check my swarm's GDP"
|
|
533
539
|
`,
|
|
534
540
|
};
|
|
@@ -773,7 +779,7 @@ async function main() {
|
|
|
773
779
|
agentAddress: 'agent1q...', // Your Agentverse agent
|
|
774
780
|
name: 'My Agent',
|
|
775
781
|
symbol: 'MYAG',
|
|
776
|
-
description: '
|
|
782
|
+
description: 'AI research assistant for on-chain analysis',
|
|
777
783
|
chainId: 97, // BSC Testnet
|
|
778
784
|
});
|
|
779
785
|
|
|
@@ -833,7 +839,7 @@ To deploy or tokenize, simply run the commands below. The SDK and CLI read from
|
|
|
833
839
|
|
|
834
840
|
| Template | Description | Use Case |
|
|
835
841
|
|----------|-------------|----------|
|
|
836
|
-
| \`
|
|
842
|
+
| \`swarm-starter\` | **Full commerce stack** (recommended) | Any agent that charges for services |
|
|
837
843
|
| \`custom\` | Blank Chat Protocol boilerplate | Start from scratch |
|
|
838
844
|
| \`price-monitor\` | Watch token prices, send alerts | Monitoring service |
|
|
839
845
|
| \`trading-bot\` | Buy/sell signal generation | Trading service |
|
|
@@ -843,14 +849,14 @@ To deploy or tokenize, simply run the commands below. The SDK and CLI read from
|
|
|
843
849
|
|
|
844
850
|
## Agent Swarms
|
|
845
851
|
|
|
846
|
-
The
|
|
852
|
+
The swarm-starter template generates agents with a complete commerce stack:
|
|
847
853
|
- PaymentService, PricingTable, TierManager (charge for services)
|
|
848
854
|
- WalletManager, RevenueTracker (track revenue)
|
|
849
855
|
- SelfAwareMixin (token price awareness)
|
|
850
856
|
- HoldingsManager (buy/sell other tokens)
|
|
851
857
|
|
|
852
858
|
### Presets
|
|
853
|
-
7 pre-configured roles:
|
|
859
|
+
7 pre-configured roles: writer, social, community, analytics, outreach, ads, strategy.
|
|
854
860
|
Use presets for instant configuration.
|
|
855
861
|
|
|
856
862
|
## Quick Commands
|
|
@@ -894,7 +900,7 @@ import {
|
|
|
894
900
|
| Tool | Description |
|
|
895
901
|
|------|-------------|
|
|
896
902
|
| \`scaffold_agent\` | Generate agent code from template |
|
|
897
|
-
| \`
|
|
903
|
+
| \`scaffold_swarm\` | Scaffold agent from swarm-starter preset |
|
|
898
904
|
| \`deploy_to_agentverse\` | Deploy agent |
|
|
899
905
|
| \`create_token_record\` | Create token |
|
|
900
906
|
| \`list_tokens\` | Browse tokens |
|
|
@@ -944,12 +950,12 @@ This is an AgentLaunch agent project. Use the MCP tools to build, deploy, and to
|
|
|
944
950
|
- \`docs/\` - SDK, CLI, MCP documentation
|
|
945
951
|
- \`examples/\` - Working code samples
|
|
946
952
|
|
|
947
|
-
##
|
|
953
|
+
## Swarm-Starter Template (Recommended)
|
|
948
954
|
|
|
949
|
-
Use the
|
|
955
|
+
Use the swarm-starter template for agents with a full commerce stack:
|
|
950
956
|
- Payment handling, pricing tables, revenue tracking
|
|
951
957
|
- Token-gated tiers, wallet management
|
|
952
|
-
- 7 presets:
|
|
958
|
+
- 7 presets: writer, social, community, analytics, outreach, ads, strategy
|
|
953
959
|
|
|
954
960
|
## Platform Constants
|
|
955
961
|
|
|
@@ -964,13 +970,13 @@ Use the genesis template for agents with a full commerce stack:
|
|
|
964
970
|
export function buildSwarmClaudeMd(ctx) {
|
|
965
971
|
const isSingleAgent = ctx.agents.length === 1;
|
|
966
972
|
const presetDescriptions = {
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
973
|
+
writer: "Content creator — blog posts, tweet threads, newsletters, ad copy (0.01 FET/call)",
|
|
974
|
+
social: "Social media manager — post tweets, schedule threads, reply to mentions (0.005 FET/call)",
|
|
975
|
+
community: "Community manager — moderate, answer FAQs, run polls (0.002 FET/call)",
|
|
976
|
+
analytics: "Analytics engine — engagement reports, audience insights, content performance (0.005 FET/call)",
|
|
977
|
+
outreach: "Partnership outreach — find partners, draft pitches, send emails (0.01 FET/call)",
|
|
978
|
+
ads: "Ad campaign manager — create ads, A/B test, campaign reports (0.01 FET/call)",
|
|
979
|
+
strategy: "Marketing strategist — content calendars, brand audits, competitor analysis, campaign plans (0.02 FET/call)",
|
|
974
980
|
};
|
|
975
981
|
if (isSingleAgent) {
|
|
976
982
|
const agent = ctx.agents[0];
|
|
@@ -1025,12 +1031,12 @@ agentlaunch status ${agent.address}
|
|
|
1025
1031
|
## What Makes an Agent Valuable?
|
|
1026
1032
|
|
|
1027
1033
|
Agents earn fees when they provide **real value**:
|
|
1028
|
-
- **
|
|
1029
|
-
- **
|
|
1030
|
-
- **
|
|
1034
|
+
- **Content creators** (Writer): Produce blog posts, threads, newsletters that other agents consume
|
|
1035
|
+
- **Data analysts** (Analytics): Sell engagement reports and audience insights
|
|
1036
|
+
- **Strategists** (Strategy): Become the planning layer other agents depend on
|
|
1031
1037
|
|
|
1032
1038
|
The more agents that depend on yours, the more fees you earn. Consider:
|
|
1033
|
-
1. What unique
|
|
1039
|
+
1. What unique content or capability do you have?
|
|
1034
1040
|
2. Who would pay for it?
|
|
1035
1041
|
3. How can you make other agents need your service?
|
|
1036
1042
|
|
|
@@ -1155,7 +1161,7 @@ You'll receive a handoff link. Share it with someone who has a wallet to deploy
|
|
|
1155
1161
|
### 3. Customize agent behavior
|
|
1156
1162
|
Edit the code in \`agents/<role>.py\` and redeploy:
|
|
1157
1163
|
\`\`\`bash
|
|
1158
|
-
agentlaunch deploy --code agents/
|
|
1164
|
+
agentlaunch deploy --code agents/writer.py --address ${ctx.agents.find((a) => a.preset === "writer")?.address || "<writer-address>"}
|
|
1159
1165
|
\`\`\`
|
|
1160
1166
|
|
|
1161
1167
|
### 4. Monitor the swarm
|
|
@@ -1179,9 +1185,9 @@ agentlaunch list
|
|
|
1179
1185
|
## What Makes a Swarm Valuable?
|
|
1180
1186
|
|
|
1181
1187
|
Swarms earn fees when agents **depend on each other**:
|
|
1182
|
-
- **
|
|
1183
|
-
- **
|
|
1184
|
-
- **
|
|
1188
|
+
- **Writer** produces content → Social, Ads, Outreach consume it
|
|
1189
|
+
- **Analytics** sells insights → Strategy, Ads buy them
|
|
1190
|
+
- **Strategy** creates plans → Everyone follows the campaign plan
|
|
1185
1191
|
|
|
1186
1192
|
The more interconnections, the more fees flow. Your agents should:
|
|
1187
1193
|
1. Provide unique, high-quality services
|