agentlaunch-templates 0.4.2 → 0.4.4
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__/swarm-starter-integration.test.d.ts +12 -0
- package/dist/__tests__/swarm-starter-integration.test.d.ts.map +1 -0
- package/dist/__tests__/swarm-starter-integration.test.js +143 -0
- package/dist/__tests__/swarm-starter-integration.test.js.map +1 -0
- package/dist/__tests__/swarm-starter.test.d.ts +16 -0
- package/dist/__tests__/swarm-starter.test.d.ts.map +1 -0
- package/dist/__tests__/swarm-starter.test.js +310 -0
- 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 +563 -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 +5 -14
- package/dist/templates/chat-memory.d.ts.map +1 -1
- package/dist/templates/chat-memory.js +142 -220
- 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/genesis.d.ts.map +1 -1
- package/dist/templates/genesis.js +10 -0
- package/dist/templates/genesis.js.map +1 -1
- package/dist/templates/swarm-starter.d.ts +26 -0
- package/dist/templates/swarm-starter.d.ts.map +1 -0
- package/dist/templates/swarm-starter.js +1421 -0
- package/dist/templates/swarm-starter.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for Swarm-starter template and Presets system — TST-01
|
|
3
|
+
*
|
|
4
|
+
* Verifies:
|
|
5
|
+
* - Swarm-starter template generates valid output with basic variables
|
|
6
|
+
* - All 7 presets generate valid code via generateFromTemplate("swarm-starter", ...)
|
|
7
|
+
* - Variable substitution replaces all expected placeholders
|
|
8
|
+
* - Generated code contains required markers and imports
|
|
9
|
+
* - Commerce layers (PaymentService, PricingTable, TierManager) present
|
|
10
|
+
* - Strict mode throws on missing required variables
|
|
11
|
+
* - Default values are used when only agent_name is provided
|
|
12
|
+
* - getTemplate("swarm-starter") returns the template metadata
|
|
13
|
+
* - listTemplates() includes swarm-starter and it is first in the list
|
|
14
|
+
*/
|
|
15
|
+
import { describe, it } from 'node:test';
|
|
16
|
+
import assert from 'node:assert/strict';
|
|
17
|
+
import { generateFromTemplate } from '../generator.js';
|
|
18
|
+
import { getTemplate, listTemplates } from '../registry.js';
|
|
19
|
+
import { getPreset, listPresets } from '../presets.js';
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Constants
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
const PRESET_NAMES = [
|
|
24
|
+
'writer',
|
|
25
|
+
'social',
|
|
26
|
+
'community',
|
|
27
|
+
'analytics',
|
|
28
|
+
'outreach',
|
|
29
|
+
'ads',
|
|
30
|
+
'strategy',
|
|
31
|
+
];
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Swarm-starter template registration
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
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
|
+
assert.ok(tpl.description, 'template should have a description');
|
|
41
|
+
assert.ok(tpl.category, 'template should have a category');
|
|
42
|
+
assert.ok(Array.isArray(tpl.variables), 'template should have variables array');
|
|
43
|
+
assert.ok(typeof tpl.code === 'string', 'template should have code string');
|
|
44
|
+
});
|
|
45
|
+
it('listTemplates() includes swarm-starter', () => {
|
|
46
|
+
const templates = listTemplates();
|
|
47
|
+
const names = templates.map((t) => t.name);
|
|
48
|
+
assert.ok(names.includes('swarm-starter'), `swarm-starter should be in list: ${names.join(', ')}`);
|
|
49
|
+
});
|
|
50
|
+
it('chat-memory is first in the template list (default)', () => {
|
|
51
|
+
const templates = listTemplates();
|
|
52
|
+
assert.equal(templates[0].name, 'chat-memory', `First template should be chat-memory (default), got: ${templates[0].name}`);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// Basic generation
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
describe('Swarm-starter template — basic generation', () => {
|
|
59
|
+
it('generates valid output with agent_name', () => {
|
|
60
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
61
|
+
agent_name: 'TestAgent',
|
|
62
|
+
});
|
|
63
|
+
assert.ok(result.code, 'should produce code');
|
|
64
|
+
assert.ok(result.readme, 'should produce readme');
|
|
65
|
+
assert.ok(result.envExample, 'should produce envExample');
|
|
66
|
+
assert.ok(result.claudeMd, 'should produce claudeMd');
|
|
67
|
+
assert.ok(result.claudeSettings, 'should produce claudeSettings');
|
|
68
|
+
assert.ok(result.agentlaunchConfig, 'should produce agentlaunchConfig');
|
|
69
|
+
});
|
|
70
|
+
it('code output is non-empty Python', () => {
|
|
71
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
72
|
+
agent_name: 'TestAgent',
|
|
73
|
+
});
|
|
74
|
+
assert.ok(result.code.length > 100, 'code should be substantial');
|
|
75
|
+
// Python import check
|
|
76
|
+
assert.ok(result.code.includes('from uagents import Agent, Context'), 'code should contain uagents import');
|
|
77
|
+
});
|
|
78
|
+
it('readme mentions the agent name', () => {
|
|
79
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
80
|
+
agent_name: 'MySwarmBot',
|
|
81
|
+
});
|
|
82
|
+
assert.ok(result.readme.includes('MySwarmBot'), 'readme should mention agent_name');
|
|
83
|
+
});
|
|
84
|
+
it('envExample lists required environment variables', () => {
|
|
85
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
86
|
+
agent_name: 'TestAgent',
|
|
87
|
+
});
|
|
88
|
+
assert.ok(result.envExample.includes('AGENTVERSE_API_KEY'), 'envExample should include AGENTVERSE_API_KEY');
|
|
89
|
+
});
|
|
90
|
+
it('agentlaunchConfig references the swarm-starter template', () => {
|
|
91
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
92
|
+
agent_name: 'TestAgent',
|
|
93
|
+
});
|
|
94
|
+
const config = JSON.parse(result.agentlaunchConfig);
|
|
95
|
+
assert.equal(config.template, 'swarm-starter', 'config should reference swarm-starter template');
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
// Variable substitution
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
describe('Swarm-starter template — variable substitution', () => {
|
|
102
|
+
it('replaces {{agent_name}} in the code', () => {
|
|
103
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
104
|
+
agent_name: 'AlphaWriter',
|
|
105
|
+
});
|
|
106
|
+
assert.ok(result.code.includes('AlphaWriter'), 'code should contain the agent name');
|
|
107
|
+
assert.ok(!result.code.includes('{{agent_name}}'), 'code should not contain raw {{agent_name}} placeholder');
|
|
108
|
+
});
|
|
109
|
+
it('replaces {{description}} in the code', () => {
|
|
110
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
111
|
+
agent_name: 'TestBot',
|
|
112
|
+
description: 'A custom description for testing',
|
|
113
|
+
});
|
|
114
|
+
assert.ok(result.code.includes('A custom description for testing'), 'code should contain the description');
|
|
115
|
+
});
|
|
116
|
+
it('replaces {{role}} in the code', () => {
|
|
117
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
118
|
+
agent_name: 'TestBot',
|
|
119
|
+
role: 'content-writer',
|
|
120
|
+
});
|
|
121
|
+
assert.ok(result.code.includes('content-writer'), 'code should contain the role');
|
|
122
|
+
});
|
|
123
|
+
it('replaces {{service_price_afet}} in the code', () => {
|
|
124
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
125
|
+
agent_name: 'TestBot',
|
|
126
|
+
service_price_afet: '5000000000000000',
|
|
127
|
+
});
|
|
128
|
+
assert.ok(result.code.includes('5000000000000000'), 'code should contain the service price');
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
// ---------------------------------------------------------------------------
|
|
132
|
+
// Required code markers
|
|
133
|
+
// ---------------------------------------------------------------------------
|
|
134
|
+
describe('Swarm-starter template — required code markers', () => {
|
|
135
|
+
it('contains YOUR SWARM LOGIC marker', () => {
|
|
136
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
137
|
+
agent_name: 'TestBot',
|
|
138
|
+
});
|
|
139
|
+
assert.ok(result.code.includes('YOUR SWARM LOGIC'), 'code should contain YOUR SWARM LOGIC marker for customization');
|
|
140
|
+
});
|
|
141
|
+
it('contains required uagents import', () => {
|
|
142
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
143
|
+
agent_name: 'TestBot',
|
|
144
|
+
});
|
|
145
|
+
assert.ok(result.code.includes('from uagents import Agent, Context'), 'code should import Agent and Context from uagents');
|
|
146
|
+
});
|
|
147
|
+
it('contains ChatAcknowledgement handler', () => {
|
|
148
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
149
|
+
agent_name: 'TestBot',
|
|
150
|
+
});
|
|
151
|
+
assert.ok(result.code.includes('ChatAcknowledgement'), 'code should include ChatAcknowledgement handler');
|
|
152
|
+
});
|
|
153
|
+
it('contains publish_manifest=True', () => {
|
|
154
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
155
|
+
agent_name: 'TestBot',
|
|
156
|
+
});
|
|
157
|
+
assert.ok(result.code.includes('publish_manifest=True'), 'code should include publish_manifest=True in agent.include()');
|
|
158
|
+
});
|
|
159
|
+
it('uses datetime.now() not datetime.utcnow()', () => {
|
|
160
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
161
|
+
agent_name: 'TestBot',
|
|
162
|
+
});
|
|
163
|
+
// Should use datetime.now()
|
|
164
|
+
assert.ok(result.code.includes('datetime.now()'), 'code should use datetime.now()');
|
|
165
|
+
// Should NOT use the deprecated datetime.utcnow()
|
|
166
|
+
assert.ok(!result.code.includes('datetime.utcnow()'), 'code should not use deprecated datetime.utcnow()');
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
// ---------------------------------------------------------------------------
|
|
170
|
+
// Commerce layers
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
describe('Swarm-starter template — commerce layers', () => {
|
|
173
|
+
it('contains PaymentService', () => {
|
|
174
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
175
|
+
agent_name: 'TestBot',
|
|
176
|
+
});
|
|
177
|
+
assert.ok(result.code.includes('PaymentService'), 'code should include PaymentService class');
|
|
178
|
+
});
|
|
179
|
+
it('contains PricingTable', () => {
|
|
180
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
181
|
+
agent_name: 'TestBot',
|
|
182
|
+
});
|
|
183
|
+
assert.ok(result.code.includes('PricingTable'), 'code should include PricingTable class');
|
|
184
|
+
});
|
|
185
|
+
it('contains TierManager', () => {
|
|
186
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
187
|
+
agent_name: 'TestBot',
|
|
188
|
+
});
|
|
189
|
+
assert.ok(result.code.includes('TierManager'), 'code should include TierManager class');
|
|
190
|
+
});
|
|
191
|
+
it('contains RevenueTracker', () => {
|
|
192
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
193
|
+
agent_name: 'TestBot',
|
|
194
|
+
});
|
|
195
|
+
assert.ok(result.code.includes('RevenueTracker'), 'code should include RevenueTracker for GDP tracking');
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
// ---------------------------------------------------------------------------
|
|
199
|
+
// Strict mode
|
|
200
|
+
// ---------------------------------------------------------------------------
|
|
201
|
+
describe('Swarm-starter template — strict mode', () => {
|
|
202
|
+
it('throws when strict is true and agent_name is missing', () => {
|
|
203
|
+
assert.throws(() => generateFromTemplate('swarm-starter', {}, { variables: {}, strict: true }), /agent_name/i, 'should throw mentioning agent_name');
|
|
204
|
+
});
|
|
205
|
+
it('does not throw when strict is false and agent_name is missing', () => {
|
|
206
|
+
assert.doesNotThrow(() => generateFromTemplate('swarm-starter', {}, { variables: {}, strict: false }), 'should not throw in non-strict mode');
|
|
207
|
+
});
|
|
208
|
+
it('leaves placeholder when strict is false and required var is missing', () => {
|
|
209
|
+
const result = generateFromTemplate('swarm-starter', {}, { variables: {}, strict: false });
|
|
210
|
+
// The unresolved placeholder should remain
|
|
211
|
+
assert.ok(result.code.includes('{{agent_name}}'), 'unresolved placeholder should remain in non-strict mode');
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
// ---------------------------------------------------------------------------
|
|
215
|
+
// Default values
|
|
216
|
+
// ---------------------------------------------------------------------------
|
|
217
|
+
describe('Swarm-starter template — default values', () => {
|
|
218
|
+
it('uses default values when only agent_name is provided', () => {
|
|
219
|
+
const result = generateFromTemplate('swarm-starter', {
|
|
220
|
+
agent_name: 'MinimalAgent',
|
|
221
|
+
});
|
|
222
|
+
// Code should be valid (no raw {{...}} placeholders for defaulted vars)
|
|
223
|
+
// agent_name is provided, all other vars should use defaults
|
|
224
|
+
assert.ok(result.code.includes('MinimalAgent'), 'agent_name should be substituted');
|
|
225
|
+
// The code should not have unresolved required placeholders
|
|
226
|
+
// (description may have a default, role may have a default, etc.)
|
|
227
|
+
// Check that most template variables with defaults are resolved
|
|
228
|
+
const unresolvedCount = (result.code.match(/\{\{\w+\}\}/g) || []).length;
|
|
229
|
+
// Some optional vars without defaults may remain, but required ones with defaults should be resolved
|
|
230
|
+
assert.ok(unresolvedCount === 0, `Should have no unresolved placeholders, found ${unresolvedCount}: ${(result.code.match(/\{\{\w+\}\}/g) || []).join(', ')}`);
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
// ---------------------------------------------------------------------------
|
|
234
|
+
// Presets
|
|
235
|
+
// ---------------------------------------------------------------------------
|
|
236
|
+
describe('Presets — listPresets()', () => {
|
|
237
|
+
it('returns an array of presets', () => {
|
|
238
|
+
const presets = listPresets();
|
|
239
|
+
assert.ok(Array.isArray(presets), 'listPresets() should return an array');
|
|
240
|
+
assert.ok(presets.length >= 7, `should have at least 7 presets, got ${presets.length}`);
|
|
241
|
+
});
|
|
242
|
+
it('each preset has required fields', () => {
|
|
243
|
+
const presets = listPresets();
|
|
244
|
+
for (const preset of presets) {
|
|
245
|
+
assert.ok(preset.name, `preset should have name`);
|
|
246
|
+
assert.ok(preset.displayName, `preset ${preset.name} should have displayName`);
|
|
247
|
+
assert.ok(preset.symbol, `preset ${preset.name} should have symbol`);
|
|
248
|
+
assert.ok(preset.description, `preset ${preset.name} should have description`);
|
|
249
|
+
assert.ok(preset.role, `preset ${preset.name} should have role`);
|
|
250
|
+
assert.ok(preset.variables, `preset ${preset.name} should have variables`);
|
|
251
|
+
assert.ok(typeof preset.variables === 'object', `preset ${preset.name} variables should be an object`);
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
it('includes all 7 marketing team presets', () => {
|
|
255
|
+
const presets = listPresets();
|
|
256
|
+
const presetNames = presets.map((p) => p.name);
|
|
257
|
+
for (const expected of PRESET_NAMES) {
|
|
258
|
+
assert.ok(presetNames.includes(expected), `should include "${expected}" preset. Available: ${presetNames.join(', ')}`);
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
describe('Presets — getPreset()', () => {
|
|
263
|
+
it('returns a preset for each known name', () => {
|
|
264
|
+
for (const name of PRESET_NAMES) {
|
|
265
|
+
const preset = getPreset(name);
|
|
266
|
+
assert.ok(preset, `getPreset("${name}") should return a preset`);
|
|
267
|
+
assert.equal(preset.name, name);
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
it('returns undefined for an unknown preset name', () => {
|
|
271
|
+
const preset = getPreset('nonexistent-preset-xyz');
|
|
272
|
+
assert.equal(preset, undefined, 'unknown preset should return undefined');
|
|
273
|
+
});
|
|
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
|
+
});
|
|
283
|
+
});
|
|
284
|
+
// ---------------------------------------------------------------------------
|
|
285
|
+
// All presets generate valid code
|
|
286
|
+
// ---------------------------------------------------------------------------
|
|
287
|
+
describe('Presets — all presets generate valid swarm-starter code', () => {
|
|
288
|
+
for (const presetName of PRESET_NAMES) {
|
|
289
|
+
it(`preset "${presetName}" generates valid code from swarm-starter template`, () => {
|
|
290
|
+
const preset = getPreset(presetName);
|
|
291
|
+
assert.ok(preset, `preset "${presetName}" should exist`);
|
|
292
|
+
const result = generateFromTemplate('swarm-starter', preset.variables);
|
|
293
|
+
// Basic validity checks
|
|
294
|
+
assert.ok(result.code, `${presetName}: should produce code`);
|
|
295
|
+
assert.ok(result.code.length > 100, `${presetName}: code should be substantial`);
|
|
296
|
+
// Should have required imports
|
|
297
|
+
assert.ok(result.code.includes('from uagents import'), `${presetName}: code should have uagents import`);
|
|
298
|
+
// No unresolved placeholders
|
|
299
|
+
const unresolved = result.code.match(/\{\{\w+\}\}/g) || [];
|
|
300
|
+
assert.equal(unresolved.length, 0, `${presetName}: should have no unresolved placeholders, found: ${unresolved.join(', ')}`);
|
|
301
|
+
// Should produce all expected files
|
|
302
|
+
assert.ok(result.readme, `${presetName}: should produce readme`);
|
|
303
|
+
assert.ok(result.envExample, `${presetName}: should produce envExample`);
|
|
304
|
+
assert.ok(result.claudeMd, `${presetName}: should produce claudeMd`);
|
|
305
|
+
assert.ok(result.claudeSettings, `${presetName}: should produce claudeSettings`);
|
|
306
|
+
assert.ok(result.agentlaunchConfig, `${presetName}: should produce agentlaunchConfig`);
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
});
|
|
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
|