@aiassesstech/nole 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/CHANGELOG.md +36 -0
- package/agent/PRODUCT-KNOWLEDGE.md +272 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/pipeline/content-calendar.d.ts +31 -0
- package/dist/pipeline/content-calendar.d.ts.map +1 -0
- package/dist/pipeline/content-calendar.js +94 -0
- package/dist/pipeline/content-calendar.js.map +1 -0
- package/dist/pipeline/directory-outreach.d.ts +37 -0
- package/dist/pipeline/directory-outreach.d.ts.map +1 -0
- package/dist/pipeline/directory-outreach.js +81 -0
- package/dist/pipeline/directory-outreach.js.map +1 -0
- package/dist/pipeline/discovery.d.ts +25 -0
- package/dist/pipeline/discovery.d.ts.map +1 -0
- package/dist/pipeline/discovery.js +46 -0
- package/dist/pipeline/discovery.js.map +1 -0
- package/dist/pipeline/fleet-discovery.d.ts +25 -0
- package/dist/pipeline/fleet-discovery.d.ts.map +1 -0
- package/dist/pipeline/fleet-discovery.js +57 -0
- package/dist/pipeline/fleet-discovery.js.map +1 -0
- package/dist/pipeline/index.d.ts +17 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +11 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/nurture.d.ts +23 -0
- package/dist/pipeline/nurture.d.ts.map +1 -0
- package/dist/pipeline/nurture.js +74 -0
- package/dist/pipeline/nurture.js.map +1 -0
- package/dist/pipeline/onboarding.d.ts +12 -0
- package/dist/pipeline/onboarding.d.ts.map +1 -0
- package/dist/pipeline/onboarding.js +71 -0
- package/dist/pipeline/onboarding.js.map +1 -0
- package/dist/pipeline/pitch-templates.d.ts +27 -0
- package/dist/pipeline/pitch-templates.d.ts.map +1 -0
- package/dist/pipeline/pitch-templates.js +112 -0
- package/dist/pipeline/pitch-templates.js.map +1 -0
- package/dist/pipeline/prospect-store.d.ts +34 -0
- package/dist/pipeline/prospect-store.d.ts.map +1 -0
- package/dist/pipeline/prospect-store.js +201 -0
- package/dist/pipeline/prospect-store.js.map +1 -0
- package/dist/pipeline/qualification.d.ts +28 -0
- package/dist/pipeline/qualification.d.ts.map +1 -0
- package/dist/pipeline/qualification.js +123 -0
- package/dist/pipeline/qualification.js.map +1 -0
- package/dist/pipeline/types.d.ts +73 -0
- package/dist/pipeline/types.d.ts.map +1 -0
- package/dist/pipeline/types.js +10 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +822 -4
- package/dist/plugin.js.map +1 -1
- package/dist/types/nole-config.d.ts +48 -0
- package/dist/types/nole-config.d.ts.map +1 -1
- package/dist/types/nole-config.js +20 -0
- package/dist/types/nole-config.js.map +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { readFile, writeFile, mkdir, readdir, unlink } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { generateId } from '../types/shared.js';
|
|
5
|
+
/**
|
|
6
|
+
* Prospect pipeline persistence — tracks prospects through the revenue funnel.
|
|
7
|
+
*
|
|
8
|
+
* Follows the same atomic-write pattern as JsonNoleStore.
|
|
9
|
+
* Files stored in .nole-data/pipeline/{id}.json so OpenClaw memory scanner
|
|
10
|
+
* can index them (per Rule 807).
|
|
11
|
+
*/
|
|
12
|
+
export class ProspectPipelineStore {
|
|
13
|
+
pipelineDir;
|
|
14
|
+
contentDir;
|
|
15
|
+
memoryWriter;
|
|
16
|
+
constructor(dataDir, memoryWriter) {
|
|
17
|
+
this.pipelineDir = join(dataDir, 'pipeline');
|
|
18
|
+
this.contentDir = join(dataDir, 'content');
|
|
19
|
+
this.memoryWriter = memoryWriter;
|
|
20
|
+
}
|
|
21
|
+
async initialize() {
|
|
22
|
+
for (const dir of [this.pipelineDir, this.contentDir]) {
|
|
23
|
+
if (!existsSync(dir)) {
|
|
24
|
+
await mkdir(dir, { recursive: true });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async addProspect(data) {
|
|
29
|
+
const now = new Date().toISOString();
|
|
30
|
+
const prospect = {
|
|
31
|
+
id: generateId('prospect'),
|
|
32
|
+
stage: 'discovered',
|
|
33
|
+
notes: [],
|
|
34
|
+
createdAt: now,
|
|
35
|
+
updatedAt: now,
|
|
36
|
+
...data,
|
|
37
|
+
};
|
|
38
|
+
await this.save(prospect);
|
|
39
|
+
await this.writeMemory('prospect-discovered', ['pipeline', 'discovered', prospect.discoveryChannel], `Prospect Discovered: ${prospect.agentName}`, `Discovered **${prospect.agentName}** via ${prospect.discoveryChannel}.\n\nContext: ${prospect.discoveryContext}`);
|
|
40
|
+
return prospect;
|
|
41
|
+
}
|
|
42
|
+
async updateStage(id, stage, updates) {
|
|
43
|
+
const prospect = await this.get(id);
|
|
44
|
+
if (!prospect)
|
|
45
|
+
return null;
|
|
46
|
+
prospect.stage = stage;
|
|
47
|
+
prospect.updatedAt = new Date().toISOString();
|
|
48
|
+
if (updates) {
|
|
49
|
+
Object.assign(prospect, updates);
|
|
50
|
+
}
|
|
51
|
+
await this.save(prospect);
|
|
52
|
+
await this.writeMemory(`prospect-${stage}`, ['pipeline', stage, prospect.discoveryChannel], `Prospect ${stage}: ${prospect.agentName}`, `**${prospect.agentName}** moved to stage **${stage}**.`);
|
|
53
|
+
return prospect;
|
|
54
|
+
}
|
|
55
|
+
async addNote(id, note) {
|
|
56
|
+
const prospect = await this.get(id);
|
|
57
|
+
if (!prospect)
|
|
58
|
+
return null;
|
|
59
|
+
prospect.notes.push(`[${new Date().toISOString()}] ${note}`);
|
|
60
|
+
prospect.updatedAt = new Date().toISOString();
|
|
61
|
+
await this.save(prospect);
|
|
62
|
+
return prospect;
|
|
63
|
+
}
|
|
64
|
+
async get(id) {
|
|
65
|
+
return this.readJson(join(this.pipelineDir, `${id}.json`));
|
|
66
|
+
}
|
|
67
|
+
async listByStage(stage, limit = 50) {
|
|
68
|
+
const all = await this.listAll(limit * 3);
|
|
69
|
+
return all.filter((p) => p.stage === stage).slice(0, limit);
|
|
70
|
+
}
|
|
71
|
+
async listAll(limit = 200) {
|
|
72
|
+
return this.listJsonDir(this.pipelineDir, limit);
|
|
73
|
+
}
|
|
74
|
+
async findByAgentName(name) {
|
|
75
|
+
const all = await this.listAll();
|
|
76
|
+
const lower = name.toLowerCase();
|
|
77
|
+
return all.find((p) => p.agentName.toLowerCase() === lower) ?? null;
|
|
78
|
+
}
|
|
79
|
+
async findByWallet(wallet) {
|
|
80
|
+
const all = await this.listAll();
|
|
81
|
+
const lower = wallet.toLowerCase();
|
|
82
|
+
return all.find((p) => p.walletAddress?.toLowerCase() === lower) ?? null;
|
|
83
|
+
}
|
|
84
|
+
async getSummary() {
|
|
85
|
+
const all = await this.listAll();
|
|
86
|
+
const today = new Date().toISOString().slice(0, 10);
|
|
87
|
+
const byStage = {
|
|
88
|
+
discovered: 0,
|
|
89
|
+
qualified: 0,
|
|
90
|
+
pitched: 0,
|
|
91
|
+
converted: 0,
|
|
92
|
+
onboarded: 0,
|
|
93
|
+
disqualified: 0,
|
|
94
|
+
declined: 0,
|
|
95
|
+
};
|
|
96
|
+
const byChannel = {};
|
|
97
|
+
let todayDiscovered = 0;
|
|
98
|
+
let todayPitched = 0;
|
|
99
|
+
let todayConverted = 0;
|
|
100
|
+
for (const p of all) {
|
|
101
|
+
byStage[p.stage]++;
|
|
102
|
+
byChannel[p.discoveryChannel] = (byChannel[p.discoveryChannel] ?? 0) + 1;
|
|
103
|
+
if (p.createdAt.startsWith(today) && p.stage !== 'disqualified')
|
|
104
|
+
todayDiscovered++;
|
|
105
|
+
if (p.pitchDeliveredAt?.startsWith(today))
|
|
106
|
+
todayPitched++;
|
|
107
|
+
if (p.convertedAt?.startsWith(today))
|
|
108
|
+
todayConverted++;
|
|
109
|
+
}
|
|
110
|
+
const totalActive = all.filter((p) => !['disqualified', 'declined'].includes(p.stage)).length;
|
|
111
|
+
const converted = byStage.converted + byStage.onboarded;
|
|
112
|
+
const pitched = byStage.pitched + converted;
|
|
113
|
+
return {
|
|
114
|
+
total: all.length,
|
|
115
|
+
byStage,
|
|
116
|
+
byChannel,
|
|
117
|
+
conversionRate: totalActive > 0 ? converted / totalActive : 0,
|
|
118
|
+
pitchToConversionRate: pitched > 0 ? converted / pitched : 0,
|
|
119
|
+
todayDiscovered,
|
|
120
|
+
todayPitched,
|
|
121
|
+
todayConverted,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
async saveContentPerformance(content) {
|
|
125
|
+
const path = join(this.contentDir, `${content.postId}.json`);
|
|
126
|
+
await this.writeJson(path, content);
|
|
127
|
+
}
|
|
128
|
+
async listContentPerformance(limit = 50) {
|
|
129
|
+
return this.listJsonDir(this.contentDir, limit);
|
|
130
|
+
}
|
|
131
|
+
async remove(id) {
|
|
132
|
+
const path = join(this.pipelineDir, `${id}.json`);
|
|
133
|
+
try {
|
|
134
|
+
await unlink(path);
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// --- Internal helpers ---
|
|
142
|
+
async save(prospect) {
|
|
143
|
+
await this.writeJson(join(this.pipelineDir, `${prospect.id}.json`), prospect);
|
|
144
|
+
}
|
|
145
|
+
async writeJson(fullPath, data) {
|
|
146
|
+
const dir = fullPath.substring(0, fullPath.lastIndexOf('/'));
|
|
147
|
+
if (!existsSync(dir)) {
|
|
148
|
+
await mkdir(dir, { recursive: true });
|
|
149
|
+
}
|
|
150
|
+
const tmpPath = `${fullPath}.tmp`;
|
|
151
|
+
const json = JSON.stringify(data, null, 2);
|
|
152
|
+
await writeFile(tmpPath, json, 'utf-8');
|
|
153
|
+
await writeFile(fullPath, json, 'utf-8');
|
|
154
|
+
try {
|
|
155
|
+
await unlink(tmpPath);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
// best-effort cleanup
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
async readJson(fullPath) {
|
|
162
|
+
try {
|
|
163
|
+
const raw = await readFile(fullPath, 'utf-8');
|
|
164
|
+
return JSON.parse(raw);
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
async listJsonDir(dir, limit = 200) {
|
|
171
|
+
try {
|
|
172
|
+
const files = await readdir(dir);
|
|
173
|
+
const jsonFiles = files
|
|
174
|
+
.filter((f) => f.endsWith('.json'))
|
|
175
|
+
.sort()
|
|
176
|
+
.reverse()
|
|
177
|
+
.slice(0, limit);
|
|
178
|
+
const results = [];
|
|
179
|
+
for (const file of jsonFiles) {
|
|
180
|
+
const data = await this.readJson(join(dir, file));
|
|
181
|
+
if (data)
|
|
182
|
+
results.push(data);
|
|
183
|
+
}
|
|
184
|
+
return results;
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return [];
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
async writeMemory(type, tags, title, body) {
|
|
191
|
+
if (!this.memoryWriter)
|
|
192
|
+
return;
|
|
193
|
+
try {
|
|
194
|
+
await this.memoryWriter.write({ agent: 'nole', type, tags, title, body });
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
// best-effort
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=prospect-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prospect-store.js","sourceRoot":"","sources":["../../src/pipeline/prospect-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { QualifiedProspect, DiscoveryChannel } from './types.js';
|
|
2
|
+
export interface QualificationInput {
|
|
3
|
+
agentName: string;
|
|
4
|
+
platform: string;
|
|
5
|
+
discoveryChannel: DiscoveryChannel;
|
|
6
|
+
discoveryContext: string;
|
|
7
|
+
walletAddress?: string;
|
|
8
|
+
profileBio?: string;
|
|
9
|
+
estimatedFleetSize?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface QualificationResult {
|
|
12
|
+
passed: boolean;
|
|
13
|
+
prospect: QualifiedProspect;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Qualify a discovered prospect against Rules 5 and 14.
|
|
17
|
+
*
|
|
18
|
+
* Rule 5: Principled disqualification — refuse scam bots, adult content,
|
|
19
|
+
* manipulation bots, or any agent engaged in deceptive behavior.
|
|
20
|
+
* Rule 14: Qualify before recruiting — evaluate before proposing.
|
|
21
|
+
*/
|
|
22
|
+
export declare function qualifyProspect(input: QualificationInput): QualificationResult;
|
|
23
|
+
/**
|
|
24
|
+
* Recommend an appropriate tier based on fleet size.
|
|
25
|
+
* Per Rule 15: never recommend a higher tier than the fleet justifies.
|
|
26
|
+
*/
|
|
27
|
+
export declare function recommendTier(fleetSize: number): string;
|
|
28
|
+
//# sourceMappingURL=qualification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qualification.d.ts","sourceRoot":"","sources":["../../src/pipeline/qualification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAwBtE,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,CA2D9E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMvD"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
const SCAM_PATTERNS = [
|
|
2
|
+
/\bfree money\b/i,
|
|
3
|
+
/\bguaranteed returns\b/i,
|
|
4
|
+
/\b(pump|dump)\b/i,
|
|
5
|
+
/\bget rich quick\b/i,
|
|
6
|
+
/\bairdrop.*claim\b/i,
|
|
7
|
+
/\bsend.*crypto.*receive.*double\b/i,
|
|
8
|
+
/\bphishing\b/i,
|
|
9
|
+
/\bscam\b/i,
|
|
10
|
+
];
|
|
11
|
+
const NSFW_PATTERNS = [
|
|
12
|
+
/\b(nsfw|adult|xxx|porn)\b/i,
|
|
13
|
+
/\bexplicit\s+content\b/i,
|
|
14
|
+
];
|
|
15
|
+
const MANIPULATION_PATTERNS = [
|
|
16
|
+
/\b(spam|bot\s*farm|fake\s*followers)\b/i,
|
|
17
|
+
/\bmass\s+(follow|dm|message)\b/i,
|
|
18
|
+
/\bsock\s*puppet\b/i,
|
|
19
|
+
];
|
|
20
|
+
/**
|
|
21
|
+
* Qualify a discovered prospect against Rules 5 and 14.
|
|
22
|
+
*
|
|
23
|
+
* Rule 5: Principled disqualification — refuse scam bots, adult content,
|
|
24
|
+
* manipulation bots, or any agent engaged in deceptive behavior.
|
|
25
|
+
* Rule 14: Qualify before recruiting — evaluate before proposing.
|
|
26
|
+
*/
|
|
27
|
+
export function qualifyProspect(input) {
|
|
28
|
+
const context = `${input.discoveryContext} ${input.profileBio ?? ''}`;
|
|
29
|
+
let score = 50;
|
|
30
|
+
let reason;
|
|
31
|
+
for (const pattern of SCAM_PATTERNS) {
|
|
32
|
+
if (pattern.test(context)) {
|
|
33
|
+
return fail(input, 'Scam patterns detected — Rule 5 disqualification');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
for (const pattern of NSFW_PATTERNS) {
|
|
37
|
+
if (pattern.test(context)) {
|
|
38
|
+
return fail(input, 'Adult/NSFW content — Rule 5 disqualification');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
for (const pattern of MANIPULATION_PATTERNS) {
|
|
42
|
+
if (pattern.test(context)) {
|
|
43
|
+
return fail(input, 'Manipulation/spam patterns — Rule 5 disqualification');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const trustSignals = [
|
|
47
|
+
/\b(trust|safety|ethics|governance|responsible)\b/i,
|
|
48
|
+
/\b(compliance|audit|oversight|accountability)\b/i,
|
|
49
|
+
/\b(assessment|certification|verification)\b/i,
|
|
50
|
+
/\b(fleet|agents?|autonomous)\b/i,
|
|
51
|
+
];
|
|
52
|
+
for (const signal of trustSignals) {
|
|
53
|
+
if (signal.test(context))
|
|
54
|
+
score += 10;
|
|
55
|
+
}
|
|
56
|
+
if (input.walletAddress)
|
|
57
|
+
score += 5;
|
|
58
|
+
score = Math.min(100, Math.max(0, score));
|
|
59
|
+
if (score < 30) {
|
|
60
|
+
reason = `Low qualification score (${score}) — insufficient trust signals`;
|
|
61
|
+
return fail(input, reason);
|
|
62
|
+
}
|
|
63
|
+
const fleetSize = input.estimatedFleetSize ?? estimateFleetSize(context);
|
|
64
|
+
const tier = recommendTier(fleetSize);
|
|
65
|
+
return {
|
|
66
|
+
passed: true,
|
|
67
|
+
prospect: {
|
|
68
|
+
agentName: input.agentName,
|
|
69
|
+
platform: input.platform,
|
|
70
|
+
discoveryChannel: input.discoveryChannel,
|
|
71
|
+
discoveryContext: input.discoveryContext,
|
|
72
|
+
walletAddress: input.walletAddress,
|
|
73
|
+
estimatedFleetSize: fleetSize,
|
|
74
|
+
recommendedTier: tier,
|
|
75
|
+
qualificationScore: score,
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Recommend an appropriate tier based on fleet size.
|
|
81
|
+
* Per Rule 15: never recommend a higher tier than the fleet justifies.
|
|
82
|
+
*/
|
|
83
|
+
export function recommendTier(fleetSize) {
|
|
84
|
+
if (fleetSize <= 1)
|
|
85
|
+
return 'SCOUT';
|
|
86
|
+
if (fleetSize <= 5)
|
|
87
|
+
return 'GUARDIAN';
|
|
88
|
+
if (fleetSize <= 25)
|
|
89
|
+
return 'SENTINEL';
|
|
90
|
+
if (fleetSize <= 100)
|
|
91
|
+
return 'VANGUARD';
|
|
92
|
+
return 'SOVEREIGN';
|
|
93
|
+
}
|
|
94
|
+
function estimateFleetSize(context) {
|
|
95
|
+
const fleetMatch = context.match(/(\d+)\s*agents?/i);
|
|
96
|
+
if (fleetMatch) {
|
|
97
|
+
const n = parseInt(fleetMatch[1], 10);
|
|
98
|
+
if (n > 0 && n < 10000)
|
|
99
|
+
return n;
|
|
100
|
+
}
|
|
101
|
+
if (/\b(fleet|multiple agents|team of)\b/i.test(context))
|
|
102
|
+
return 5;
|
|
103
|
+
if (/\b(enterprise|large|organization)\b/i.test(context))
|
|
104
|
+
return 50;
|
|
105
|
+
return 1;
|
|
106
|
+
}
|
|
107
|
+
function fail(input, reason) {
|
|
108
|
+
return {
|
|
109
|
+
passed: false,
|
|
110
|
+
prospect: {
|
|
111
|
+
agentName: input.agentName,
|
|
112
|
+
platform: input.platform,
|
|
113
|
+
discoveryChannel: input.discoveryChannel,
|
|
114
|
+
discoveryContext: input.discoveryContext,
|
|
115
|
+
walletAddress: input.walletAddress,
|
|
116
|
+
estimatedFleetSize: 0,
|
|
117
|
+
recommendedTier: '',
|
|
118
|
+
qualificationScore: 0,
|
|
119
|
+
disqualificationReason: reason,
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=qualification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qualification.js","sourceRoot":"","sources":["../../src/pipeline/qualification.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { NoleId } from '../types/shared.js';
|
|
2
|
+
export type ProspectStage = 'discovered' | 'qualified' | 'pitched' | 'converted' | 'onboarded' | 'disqualified' | 'declined';
|
|
3
|
+
export type DiscoveryChannel = 'moltbook' | 'x' | 'openclaw' | 'fleet-bus' | 'directory' | 'inbound';
|
|
4
|
+
export type CommissionSplitType = 'DIRECT' | 'LIEUTENANT' | 'AFFILIATE';
|
|
5
|
+
export type PitchRiskLevel = 'low' | 'medium' | 'high';
|
|
6
|
+
export interface ProspectRecord {
|
|
7
|
+
id: NoleId;
|
|
8
|
+
agentName: string;
|
|
9
|
+
platform: string;
|
|
10
|
+
discoveryChannel: DiscoveryChannel;
|
|
11
|
+
discoveryContext: string;
|
|
12
|
+
walletAddress?: string;
|
|
13
|
+
stage: ProspectStage;
|
|
14
|
+
qualificationScore?: number;
|
|
15
|
+
recommendedTier?: string;
|
|
16
|
+
disqualificationReason?: string;
|
|
17
|
+
pitchContent?: string;
|
|
18
|
+
pitchGovernanceId?: string;
|
|
19
|
+
pitchRiskLevel?: PitchRiskLevel;
|
|
20
|
+
pitchApproved?: boolean;
|
|
21
|
+
pitchDeliveredAt?: string;
|
|
22
|
+
subscriptionWallet?: string;
|
|
23
|
+
subscriptionTier?: string;
|
|
24
|
+
convertedAt?: string;
|
|
25
|
+
commissionEscrowId?: string;
|
|
26
|
+
commissionSplitType?: CommissionSplitType;
|
|
27
|
+
trialReferralCode?: string;
|
|
28
|
+
trialConvertedToSubscription?: boolean;
|
|
29
|
+
lastContactAt?: string;
|
|
30
|
+
nextActionAt?: string;
|
|
31
|
+
nextAction?: string;
|
|
32
|
+
notes: string[];
|
|
33
|
+
createdAt: string;
|
|
34
|
+
updatedAt: string;
|
|
35
|
+
}
|
|
36
|
+
export interface PipelineSummary {
|
|
37
|
+
total: number;
|
|
38
|
+
byStage: Record<ProspectStage, number>;
|
|
39
|
+
byChannel: Partial<Record<DiscoveryChannel, number>>;
|
|
40
|
+
conversionRate: number;
|
|
41
|
+
pitchToConversionRate: number;
|
|
42
|
+
todayDiscovered: number;
|
|
43
|
+
todayPitched: number;
|
|
44
|
+
todayConverted: number;
|
|
45
|
+
}
|
|
46
|
+
export interface QualifiedProspect {
|
|
47
|
+
agentName: string;
|
|
48
|
+
platform: string;
|
|
49
|
+
discoveryChannel: DiscoveryChannel;
|
|
50
|
+
discoveryContext: string;
|
|
51
|
+
walletAddress?: string;
|
|
52
|
+
estimatedFleetSize: number;
|
|
53
|
+
recommendedTier: string;
|
|
54
|
+
qualificationScore: number;
|
|
55
|
+
disqualificationReason?: string;
|
|
56
|
+
}
|
|
57
|
+
export interface ContentPerformance {
|
|
58
|
+
postId: string;
|
|
59
|
+
platform: 'moltbook' | 'x' | 'linkedin';
|
|
60
|
+
contentPreview: string;
|
|
61
|
+
postedAt: string;
|
|
62
|
+
engagementSignals: number;
|
|
63
|
+
inboundProspectsGenerated: number;
|
|
64
|
+
conversionsAttributed: number;
|
|
65
|
+
}
|
|
66
|
+
export declare const DISCOVERY_KEYWORDS: {
|
|
67
|
+
readonly trust: readonly ["agent trust", "AI safety", "behavioral assessment", "ethical AI", "trustworthy AI"];
|
|
68
|
+
readonly compliance: readonly ["AI governance", "responsible AI", "compliance", "AI audit", "AI oversight"];
|
|
69
|
+
readonly painPoints: readonly ["trust problem", "agent reliability", "bad bot", "rogue agent", "unethical AI"];
|
|
70
|
+
readonly competition: readonly ["AI certification", "agent verification", "AI ethics", "agent assessment"];
|
|
71
|
+
};
|
|
72
|
+
export declare function getAllDiscoveryKeywords(): string[];
|
|
73
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/pipeline/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const DISCOVERY_KEYWORDS = {
|
|
2
|
+
trust: ['agent trust', 'AI safety', 'behavioral assessment', 'ethical AI', 'trustworthy AI'],
|
|
3
|
+
compliance: ['AI governance', 'responsible AI', 'compliance', 'AI audit', 'AI oversight'],
|
|
4
|
+
painPoints: ['trust problem', 'agent reliability', 'bad bot', 'rogue agent', 'unethical AI'],
|
|
5
|
+
competition: ['AI certification', 'agent verification', 'AI ethics', 'agent assessment'],
|
|
6
|
+
};
|
|
7
|
+
export function getAllDiscoveryKeywords() {
|
|
8
|
+
return Object.values(DISCOVERY_KEYWORDS).flat();
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/pipeline/types.ts"],"names":[],"mappings":"AAuFA,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,KAAK,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,uBAAuB,EAAE,YAAY,EAAE,gBAAgB,CAAC;IAC5F,UAAU,EAAE,CAAC,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,CAAC;IACzF,UAAU,EAAE,CAAC,eAAe,EAAE,mBAAmB,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,CAAC;IAC5F,WAAW,EAAE,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,WAAW,EAAE,kBAAkB,CAAC;CAChF,CAAC;AAEX,MAAM,UAAU,uBAAuB;IACrC,OAAO,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC;AAClD,CAAC"}
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAiCA;;;;;;;;;;;;;;;;GAgBG;AAGH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAkvG/C"}
|