@clien-ai/mcp 0.8.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -6
- package/dist/tools/collections.js +308 -5
- package/dist/tools/collections.js.map +1 -1
- package/dist/tools/content-type-display.js +166 -0
- package/dist/tools/content-type-display.js.map +1 -0
- package/dist/tools/credits.js +299 -0
- package/dist/tools/credits.js.map +1 -0
- package/dist/tools/interview-scripts.js +370 -0
- package/dist/tools/interview-scripts.js.map +1 -0
- package/dist/tools/interview.js +148 -6
- package/dist/tools/interview.js.map +1 -1
- package/dist/tools/output-schemas.js +47 -0
- package/dist/tools/output-schemas.js.map +1 -1
- package/dist/tools/personas.js +276 -48
- package/dist/tools/personas.js.map +1 -1
- package/dist/tools/registry.js +316 -24
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/report-digest.js +179 -3
- package/dist/tools/report-digest.js.map +1 -1
- package/dist/tools/reports.js +9 -2
- package/dist/tools/reports.js.map +1 -1
- package/dist/tools/research.js +102 -5
- package/dist/tools/research.js.map +1 -1
- package/dist/tools/scoped-research.js +270 -42
- package/dist/tools/scoped-research.js.map +1 -1
- package/dist/tools/status.js +2 -2
- package/dist/tools/status.js.map +1 -1
- package/dist/types/report.js +207 -5
- package/dist/types/report.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/tools/research.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/tools/research.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Scoped research primitives — `scan_competitors` (FUL-30)
|
|
2
|
+
* Scoped research primitives — `scan_competitors` (FUL-30), `search_forums` (FUL-29) and
|
|
3
|
+
* `scan_market` (FUL-479).
|
|
3
4
|
*
|
|
4
5
|
* These are the composable, cheaper counterparts to the `clien_research` hero: each runs exactly
|
|
5
|
-
* ONE researcher (web OR
|
|
6
|
+
* ONE researcher (web, forum OR market) as a bounded E2B job rather than the full H1–H8 pipeline.
|
|
7
|
+
*
|
|
8
|
+
* ⚠️ Each mode is a DISTINCT researcher with its own retrieval, output envelope and price — never
|
|
9
|
+
* a label on a shared one. `scan_market` exists because reaching market-only behaviour through the
|
|
10
|
+
* web researcher would have charged for a competitor scan and called it market research; it runs
|
|
11
|
+
* Exa's news + financial verticals, writes a `marketResearch` envelope carrying no competitors,
|
|
12
|
+
* and is the only scoped mode allowed to publish the Market dossier. The MCP
|
|
6
13
|
* package stays a thin bearer-auth HTTP client — this module orchestrates the same start+poll
|
|
7
14
|
* lifecycle `research.ts` uses, over the scoped endpoints:
|
|
8
15
|
*
|
|
@@ -25,17 +32,17 @@
|
|
|
25
32
|
* from `research.ts` — no new client. Only the scoped orchestration loop lives here.
|
|
26
33
|
*/
|
|
27
34
|
import { z } from 'zod';
|
|
28
|
-
import { CompetitorProfileSchema, ForumThreadSchema, } from '../types/report.js';
|
|
35
|
+
import { CompetitorProfileSchema, ForumThreadSchema, MarketFindingsSchema, } from '../types/report.js';
|
|
29
36
|
import { ToolError } from './errors.js';
|
|
30
37
|
import { buildFailureGuidance } from './failure-guidance.js';
|
|
31
38
|
import { formatEngagement } from './engagement-display.js';
|
|
32
|
-
import {
|
|
39
|
+
import { contentTypeProvenanceLine } from './content-type-display.js';
|
|
40
|
+
import { apiCall, categorizeFetchError, promoteCompletedJob, webJobUrl, } from './research.js';
|
|
33
41
|
import { safeInline, safeId, truncate, firstQuoteWithCount } from './render-safety.js';
|
|
34
42
|
// Per-endpoint timeouts. Node fetch has no implicit timeout, so a hung endpoint would otherwise
|
|
35
43
|
// wedge the MCP server forever (mirrors research.ts:START/EVENTS/REPORT_TIMEOUT_MS).
|
|
36
44
|
const START_TIMEOUT_MS = 30_000;
|
|
37
45
|
const EVENTS_POLL_TIMEOUT_MS = 30_000;
|
|
38
|
-
const PROMOTE_TIMEOUT_MS = 30_000;
|
|
39
46
|
const REPORT_FETCH_TIMEOUT_MS = 60_000;
|
|
40
47
|
/**
|
|
41
48
|
* A scoped run is a single researcher (~1–10 min), an order of magnitude shorter than the hero's
|
|
@@ -56,8 +63,12 @@ const PHASE_PROGRESS = {
|
|
|
56
63
|
};
|
|
57
64
|
/** Human label + started-log tool name per mode. */
|
|
58
65
|
const MODE_META = {
|
|
59
|
-
web: { tool: 'scan_competitors', label: 'Competitor scan', noun: 'competitors' },
|
|
60
|
-
forum: { tool: 'search_forums', label: 'Forum search', noun: 'community threads' },
|
|
66
|
+
web: { tool: 'scan_competitors', label: 'Competitor scan', noun: 'competitors', tab: 'Competitors' },
|
|
67
|
+
forum: { tool: 'search_forums', label: 'Forum search', noun: 'community threads', tab: 'Community' },
|
|
68
|
+
// "Market research", not "Market scan": this run reads news and financial sources to establish
|
|
69
|
+
// figures rather than sweeping a landscape for rows, and the web CTA that starts it says the
|
|
70
|
+
// same word. The noun is what a failure message says was NOT produced.
|
|
71
|
+
market: { tool: 'scan_market', label: 'Market research', noun: 'market figures', tab: 'Market' },
|
|
61
72
|
};
|
|
62
73
|
// Input caps. Re-declared locally (the @clien-ai/mcp package is published separately and cannot
|
|
63
74
|
// import from the Next.js app); kept in sync with MIN_IDEA_LENGTH (20) / MAX_IDEA_LENGTH (10_000) /
|
|
@@ -139,6 +150,20 @@ export const SearchForumsInputSchema = z.object({
|
|
|
139
150
|
'their pain, the better the threads.'),
|
|
140
151
|
...sharedScopedFields,
|
|
141
152
|
});
|
|
153
|
+
export const ScanMarketInputSchema = z.object({
|
|
154
|
+
// .trim() before .min() — same rationale as ScanCompetitorsInputSchema.topic above.
|
|
155
|
+
topic: z
|
|
156
|
+
.string()
|
|
157
|
+
.trim()
|
|
158
|
+
.min(TOPIC_MIN, `topic must be at least ${TOPIC_MIN} characters`)
|
|
159
|
+
.max(TOPIC_MAX, 'topic too long')
|
|
160
|
+
.describe('The market to size and characterise, described in a sentence or two (min 20 chars) — e.g. ' +
|
|
161
|
+
'"AI meeting-notes tooling sold to remote engineering teams". Name the CATEGORY and the ' +
|
|
162
|
+
'BUYER: this run searches news and financial-report sources for sizing, growth and demand, ' +
|
|
163
|
+
'and a topic phrased as a single product name gives it nothing to size. It does NOT ' +
|
|
164
|
+
'discover competitors — use `scan_competitors` for the landscape.'),
|
|
165
|
+
...sharedScopedFields,
|
|
166
|
+
});
|
|
142
167
|
export class ScopedResearchToolError extends ToolError {
|
|
143
168
|
}
|
|
144
169
|
const defaultSleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
@@ -165,6 +190,22 @@ export async function searchForums(input, deps) {
|
|
|
165
190
|
}
|
|
166
191
|
return runScopedResearchTool('forum', parsed.data, deps);
|
|
167
192
|
}
|
|
193
|
+
/**
|
|
194
|
+
* `scan_market` (FUL-479) — run a scoped MARKET researcher and return the market block it
|
|
195
|
+
* established.
|
|
196
|
+
*
|
|
197
|
+
* Shares the whole start/poll/promote/report lifecycle with its two siblings; what differs is the
|
|
198
|
+
* researcher the server runs, the envelope it writes, and the dossier the promotion publishes. The
|
|
199
|
+
* server may REFUSE this mode with 503 when the capability is switched off for the deployment —
|
|
200
|
+
* see `handleScopedStartError`, which says so rather than reporting a generic failure.
|
|
201
|
+
*/
|
|
202
|
+
export async function scanMarket(input, deps) {
|
|
203
|
+
const parsed = ScanMarketInputSchema.safeParse(input);
|
|
204
|
+
if (!parsed.success) {
|
|
205
|
+
throw new ScopedResearchToolError(`Invalid input — ${formatZodError(parsed.error)}`);
|
|
206
|
+
}
|
|
207
|
+
return runScopedResearchTool('market', parsed.data, deps);
|
|
208
|
+
}
|
|
168
209
|
async function runScopedResearchTool(mode, input, deps) {
|
|
169
210
|
const { topic, product_name, project_id, project_name } = input;
|
|
170
211
|
const meta = MODE_META[mode];
|
|
@@ -246,9 +287,17 @@ async function runScopedResearchTool(mode, input, deps) {
|
|
|
246
287
|
`Try a more specific topic, or view ${webJobUrl(deps.config, jobId)}.`, { jobId });
|
|
247
288
|
}
|
|
248
289
|
// 5. Promote into the Research collections (best-effort — needs a project; standalone runs skip).
|
|
249
|
-
let
|
|
290
|
+
let promotion = {
|
|
291
|
+
promoted: false,
|
|
292
|
+
errorCode: null,
|
|
293
|
+
retryable: null,
|
|
294
|
+
// FUL-479: a scoped `scan_market` run IS eligible for market authority now, so this is no
|
|
295
|
+
// longer null on every path — `promoteScopedJob` fills it from the server's own discriminator
|
|
296
|
+
// below, and `buildScopedResult` refuses to claim a saved snapshot without it.
|
|
297
|
+
marketUpdated: null,
|
|
298
|
+
};
|
|
250
299
|
if (projectId) {
|
|
251
|
-
|
|
300
|
+
promotion = await promoteScopedJob(ctx, jobId);
|
|
252
301
|
}
|
|
253
302
|
// 6. Fetch the structured report.
|
|
254
303
|
const reportData = await fetchScopedReport(ctx, jobId, deps.config);
|
|
@@ -258,7 +307,7 @@ async function runScopedResearchTool(mode, input, deps) {
|
|
|
258
307
|
jobId,
|
|
259
308
|
status: poll.status,
|
|
260
309
|
projectId,
|
|
261
|
-
|
|
310
|
+
promotion,
|
|
262
311
|
reportData,
|
|
263
312
|
topic,
|
|
264
313
|
totalCostCents: poll.totalCostCents,
|
|
@@ -360,9 +409,10 @@ async function backoffOrBail(deps, consecutive, jobId, what) {
|
|
|
360
409
|
// Promote + report
|
|
361
410
|
// ------------------------------------------------------------------
|
|
362
411
|
/**
|
|
363
|
-
* Fire the completion promotion (POST /promote).
|
|
364
|
-
*
|
|
365
|
-
*
|
|
412
|
+
* Fire the completion promotion (POST /promote). The typed outcome distinguishes transient
|
|
413
|
+
* sweep-retryable failures from invariant blocks requiring manual inspection; either way, the tool
|
|
414
|
+
* still returns the durable findings. The server derives source='mcp' from the job config, so
|
|
415
|
+
* nothing is passed here.
|
|
366
416
|
*
|
|
367
417
|
* Success is judged by the response BODY, not just the HTTP status: the route returns 200 when the
|
|
368
418
|
* hero step succeeded even if the COLLECTIONS step failed — and for a scoped scan collections are
|
|
@@ -370,27 +420,14 @@ async function backoffOrBail(deps, consecutive, jobId, what) {
|
|
|
370
420
|
* (older server) is treated as success for backward compatibility. (review FUL-30 #10)
|
|
371
421
|
*/
|
|
372
422
|
async function promoteScopedJob(ctx, jobId) {
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
console.error(`[clien-mcp] promote for job ${jobId} returned 200 but the collections step failed: ` +
|
|
382
|
-
`${body.collections.error} — findings will appear in the Research tab after the next server sweep`);
|
|
383
|
-
return false;
|
|
384
|
-
}
|
|
385
|
-
const text = await response.text().catch(() => '');
|
|
386
|
-
console.error(`[clien-mcp] promote failed for job ${jobId} (HTTP ${response.status}): ${truncate(text, 200)} — ` +
|
|
387
|
-
'findings will appear in the Research tab after the next server sweep');
|
|
388
|
-
return false;
|
|
389
|
-
}
|
|
390
|
-
catch (err) {
|
|
391
|
-
console.error(`[clien-mcp] promote request errored for job ${jobId}:`, err instanceof Error ? err.message : String(err));
|
|
392
|
-
return false;
|
|
393
|
-
}
|
|
423
|
+
const outcome = await promoteCompletedJob(ctx, jobId);
|
|
424
|
+
if (!outcome.promoted) {
|
|
425
|
+
console.error(`[clien-mcp] collections promotion for job ${jobId} failed (${outcome.errorCode}); ` +
|
|
426
|
+
(outcome.retryable
|
|
427
|
+
? 'the server sweep will retry'
|
|
428
|
+
: 'manual inspection is required'));
|
|
429
|
+
}
|
|
430
|
+
return outcome;
|
|
394
431
|
}
|
|
395
432
|
/** GET the structured report (JSON variant). Returns report_data (may be null). */
|
|
396
433
|
async function fetchScopedReport(ctx, jobId, config) {
|
|
@@ -415,7 +452,7 @@ async function fetchScopedReport(ctx, jobId, config) {
|
|
|
415
452
|
// Result building
|
|
416
453
|
// ------------------------------------------------------------------
|
|
417
454
|
function buildScopedResult(args) {
|
|
418
|
-
const { mode, jobId, status, projectId,
|
|
455
|
+
const { mode, jobId, status, projectId, promotion, reportData, topic, totalCostCents } = args;
|
|
419
456
|
// FUL-270 — `projectId` reaches here as the SERVER'S ECHO, not this tool's validated
|
|
420
457
|
// input: `startScopedRun` overwrites the caller's copy with `startJson.projectId`. So
|
|
421
458
|
// it does not qualify for the raw-uuid exemption `get_project`'s header carries, and
|
|
@@ -424,19 +461,47 @@ function buildScopedResult(args) {
|
|
|
424
461
|
// than naming a project by an id that is not the project's — the sentence still says
|
|
425
462
|
// the run was attached, it just declines to name an id it cannot state exactly.
|
|
426
463
|
const renderableProjectId = safeId(projectId);
|
|
464
|
+
/**
|
|
465
|
+
* ⚠️ MARKET IS THE ONE MODE WHERE `promoted` IS NOT ENOUGH (FUL-479).
|
|
466
|
+
*
|
|
467
|
+
* `project_market` is a SINGLETON owned by one run, and a promotion can succeed in full while
|
|
468
|
+
* leaving it untouched — because a newer run already owns it (`ignored_as_older`). The other two
|
|
469
|
+
* dossiers accumulate, so for them a successful promotion did add this run's rows; for market it
|
|
470
|
+
* may have added nothing. Saying "Saved to the Research → Market tab" there tells an agent the
|
|
471
|
+
* page now shows THIS run's figures when it shows a different run's, which is the same
|
|
472
|
+
* over-claim `research.ts` refuses for the hero tool, one surface over.
|
|
473
|
+
*
|
|
474
|
+
* `marketUpdated` is the SERVER's discriminator; `null` (an older server, or a rail that cannot
|
|
475
|
+
* report it) says nothing, so the wording falls back to the neutral sentence rather than
|
|
476
|
+
* guessing either way.
|
|
477
|
+
*/
|
|
478
|
+
const marketSavedLine = promotion.marketUpdated === true
|
|
479
|
+
? "Saved to the project's Research → Market tab."
|
|
480
|
+
: promotion.marketUpdated === false
|
|
481
|
+
? 'Attached to the project, but the Market snapshot was NOT changed — a newer run owns it.'
|
|
482
|
+
: 'Attached to the project; the Market snapshot may already be owned by a newer run.';
|
|
427
483
|
const persistenceLine = projectId
|
|
428
|
-
? promoted
|
|
429
|
-
?
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
484
|
+
? promotion.promoted
|
|
485
|
+
? mode === 'market'
|
|
486
|
+
? marketSavedLine
|
|
487
|
+
: `Saved to the project's Research → ${MODE_META[mode].tab} tab.`
|
|
488
|
+
: promotion.retryable === false
|
|
489
|
+
? // `errorCode` can be the server's RAW error string on an older server (see
|
|
490
|
+
// `promoteCompletedJob`), so it goes through the same forgery guard every other
|
|
491
|
+
// third-party string on this line already uses.
|
|
492
|
+
`Attached to the project, but persistence is BLOCKED (${safeInline(promotion.errorCode, 60) ?? 'UNKNOWN'}); manual inspection is required.`
|
|
493
|
+
: renderableProjectId
|
|
494
|
+
? `Attached to project ${renderableProjectId}; the Research tab will populate shortly (promotion is retrying).`
|
|
495
|
+
: 'Attached to the project; the Research tab will populate shortly (promotion is retrying).'
|
|
433
496
|
: 'Not attached to a project — results are returned here but NOT saved. Pass `project_id` or ' +
|
|
434
497
|
'`project_name` to persist them to your Research tab.';
|
|
435
498
|
const base = {
|
|
436
499
|
job_id: jobId,
|
|
437
500
|
status,
|
|
438
501
|
project_id: projectId,
|
|
439
|
-
promoted,
|
|
502
|
+
promoted: promotion.promoted,
|
|
503
|
+
promotion_error_code: promotion.errorCode,
|
|
504
|
+
promotion_retryable: promotion.retryable,
|
|
440
505
|
report_data: reportData,
|
|
441
506
|
...(totalCostCents !== undefined ? { total_cost_cents: totalCostCents } : {}),
|
|
442
507
|
};
|
|
@@ -447,6 +512,13 @@ function buildScopedResult(args) {
|
|
|
447
512
|
_meta: { ...base, competitors },
|
|
448
513
|
};
|
|
449
514
|
}
|
|
515
|
+
if (mode === 'market') {
|
|
516
|
+
const market = extractMarket(reportData);
|
|
517
|
+
return {
|
|
518
|
+
content: [{ type: 'text', text: renderMarket(market, topic, persistenceLine) }],
|
|
519
|
+
_meta: { ...base, market },
|
|
520
|
+
};
|
|
521
|
+
}
|
|
450
522
|
const threads = extractItems(reportData, ['forumResearch', 'threads'], ForumThreadSchema);
|
|
451
523
|
return {
|
|
452
524
|
content: [{ type: 'text', text: renderThreads(threads, topic, persistenceLine) }],
|
|
@@ -487,6 +559,117 @@ function extractItems(reportData, path, schema) {
|
|
|
487
559
|
}
|
|
488
560
|
return items;
|
|
489
561
|
}
|
|
562
|
+
/**
|
|
563
|
+
* Pull the market block out of `report_data.marketResearch` and FLATTEN it (FUL-479).
|
|
564
|
+
*
|
|
565
|
+
* The producer nests three of the five fields under `marketData` and leaves `positioningGaps` as
|
|
566
|
+
* its sibling — a split that exists for the promotion SQL, not for an agent. Flattening here means
|
|
567
|
+
* `MarketFindingsSchema` describes what the caller is actually told, and each field maps 1:1 onto a
|
|
568
|
+
* `project_market` column.
|
|
569
|
+
*
|
|
570
|
+
* Returns `null` when the run wrote no market envelope, which the renderer states as a fact about
|
|
571
|
+
* the RUN rather than as a fact about the market. That distinction is the whole reason this is not
|
|
572
|
+
* a `?? {}`: "this run recorded no figures" and "this market has no figures" are different claims,
|
|
573
|
+
* and only the first is one we can make.
|
|
574
|
+
*
|
|
575
|
+
* ⚠️ It reads `marketResearch` and NOT `webResearch`. A market run writes the former and carries
|
|
576
|
+
* no competitors at all; reading the latter would make this tool render a full run's competitor-era
|
|
577
|
+
* market block if one ever landed on a scoped job, i.e. attribute a $6.50 run's figures to a 4-credit
|
|
578
|
+
* one. The raw payload always survives in `_meta.report_data` either way.
|
|
579
|
+
*/
|
|
580
|
+
function extractMarket(reportData) {
|
|
581
|
+
if (!reportData || typeof reportData !== 'object')
|
|
582
|
+
return null;
|
|
583
|
+
// Keyed by string literal, like `extractItems`' path array, so the navigation is greppable —
|
|
584
|
+
// `producer-field-completeness.test.ts` falsifies this module's "MCP reads marketResearch at a
|
|
585
|
+
// nested path" decision record by looking for exactly this literal, and a dotted property access
|
|
586
|
+
// would let the record outlive the read.
|
|
587
|
+
const envelope = reportData['marketResearch'];
|
|
588
|
+
if (!envelope || typeof envelope !== 'object' || Array.isArray(envelope))
|
|
589
|
+
return null;
|
|
590
|
+
const marketData = envelope['marketData'];
|
|
591
|
+
const nested = marketData && typeof marketData === 'object' && !Array.isArray(marketData)
|
|
592
|
+
? marketData
|
|
593
|
+
: {};
|
|
594
|
+
const parsed = MarketFindingsSchema.safeParse({
|
|
595
|
+
estimatedMarketSize: nested.estimatedMarketSize,
|
|
596
|
+
growthTrend: nested.growthTrend,
|
|
597
|
+
keyTrends: nested.keyTrends,
|
|
598
|
+
claims: nested.claims,
|
|
599
|
+
positioningGaps: envelope['positioningGaps'],
|
|
600
|
+
});
|
|
601
|
+
if (!parsed.success) {
|
|
602
|
+
// Same posture as `extractItems`: a typed field of the wrong type is what crashes a renderer,
|
|
603
|
+
// and the raw payload is preserved in `_meta.report_data`, so the caller loses nothing.
|
|
604
|
+
console.error('[clien-mcp] dropped a malformed marketResearch block from the typed result; ' +
|
|
605
|
+
'the raw payload is preserved in _meta.report_data');
|
|
606
|
+
return null;
|
|
607
|
+
}
|
|
608
|
+
return parsed.data;
|
|
609
|
+
}
|
|
610
|
+
/**
|
|
611
|
+
* Render the market block for the agent.
|
|
612
|
+
*
|
|
613
|
+
* Three rules the wording carries, all of them about not over-claiming:
|
|
614
|
+
*
|
|
615
|
+
* 1. An EMPTY result is stated as a fact about the run ("this run recorded no figures"), never
|
|
616
|
+
* as a fact about the market. `get_market`'s four-answer table is the same rule one surface
|
|
617
|
+
* over, and it matters more here: the sentence is one an agent may repeat to a user as a
|
|
618
|
+
* claim about their market.
|
|
619
|
+
* 2. Nothing is INVENTED to fill a gap. A missing size prints no size line at all, rather than
|
|
620
|
+
* a "Data not available" sentinel — a sentinel we wrote is a value nobody asserted, and
|
|
621
|
+
* downstream a non-blank market-size string is treated as a claim.
|
|
622
|
+
* 3. The figures are UNGRADED here and the text says so. `list_competitors` teaches an agent
|
|
623
|
+
* that a bracket beside a fact IS the trust signal; seeing none, it can read silence as
|
|
624
|
+
* "nothing flagged" rather than "categorically un-bracketed on this surface". Same FUL-247
|
|
625
|
+
* reasoning as `renderCompetitors`' TRUST paragraph.
|
|
626
|
+
*/
|
|
627
|
+
function renderMarket(market, topic, persistenceLine) {
|
|
628
|
+
const safeTopic = safeInline(topic, 120) ?? 'this topic';
|
|
629
|
+
const size = safeInline(market?.estimatedMarketSize, 240);
|
|
630
|
+
const trend = safeInline(market?.growthTrend, 40);
|
|
631
|
+
// Guarded per ITEM, so one flattened entry cannot swallow its siblings past a shared truncate,
|
|
632
|
+
// and an entry that collapses to nothing is dropped rather than rendered as an empty gap.
|
|
633
|
+
const claims = (market?.claims ?? [])
|
|
634
|
+
.map((c) => {
|
|
635
|
+
const text = safeInline(c.text, 240);
|
|
636
|
+
if (!text)
|
|
637
|
+
return null;
|
|
638
|
+
const scope = safeInline(c.scope, 24);
|
|
639
|
+
return scope ? `${text} [${scope}]` : text;
|
|
640
|
+
})
|
|
641
|
+
.filter((line) => line !== null);
|
|
642
|
+
const trends = (market?.keyTrends ?? []).map((t) => safeInline(t, 200)).filter(Boolean);
|
|
643
|
+
const gaps = (market?.positioningGaps ?? []).map((g) => safeInline(g, 200)).filter(Boolean);
|
|
644
|
+
const hasAnything = Boolean(size) || Boolean(trend) || claims.length > 0 || trends.length > 0 || gaps.length > 0;
|
|
645
|
+
if (!hasAnything) {
|
|
646
|
+
// A statement about the RUN. Explicitly not "no market was found", and explicitly not zero.
|
|
647
|
+
return (`This market research run recorded no figures for "${safeTopic}". That is what the run ` +
|
|
648
|
+
`produced — it is not a finding that the market is small or absent. ${persistenceLine}`);
|
|
649
|
+
}
|
|
650
|
+
const sections = [`Market research for "${safeTopic}"`, ''];
|
|
651
|
+
if (size)
|
|
652
|
+
sections.push(`**Market size:** ${size}`);
|
|
653
|
+
if (trend)
|
|
654
|
+
sections.push(`**Growth trend:** ${trend}`);
|
|
655
|
+
if (claims.length > 0) {
|
|
656
|
+
sections.push('', '**Figures recorded** (one per line, with the scope the source named):');
|
|
657
|
+
sections.push(...claims.map((c, i) => `${i + 1}. ${c}`));
|
|
658
|
+
}
|
|
659
|
+
if (trends.length > 0) {
|
|
660
|
+
sections.push('', '**Key trends:**');
|
|
661
|
+
sections.push(...trends.map((t) => `- ${t}`));
|
|
662
|
+
}
|
|
663
|
+
if (gaps.length > 0) {
|
|
664
|
+
sections.push('', '**Positioning gaps** (unserved segments and unmet needs):');
|
|
665
|
+
sections.push(...gaps.map((g) => `- ${g}`));
|
|
666
|
+
}
|
|
667
|
+
sections.push('', 'TRUST: these figures are UNGRADED on this surface — no per-figure source state is attached ' +
|
|
668
|
+
'here, and the absence of a marker is not a clean bill of health. A figure with no scope ' +
|
|
669
|
+
'label is a market SIZE whose slice the source never named, not a defaulted "total". Treat ' +
|
|
670
|
+
'every figure as unverified unless you check its source yourself.', '', persistenceLine);
|
|
671
|
+
return sections.join('\n');
|
|
672
|
+
}
|
|
490
673
|
function renderCompetitors(competitors, topic, persistenceLine) {
|
|
491
674
|
if (competitors.length === 0) {
|
|
492
675
|
return `No competitors surfaced for "${safeInline(topic, 120) ?? 'this topic'}". ${persistenceLine}`;
|
|
@@ -602,7 +785,30 @@ function renderThreads(threads, topic, persistenceLine) {
|
|
|
602
785
|
// `0` vs absent exactly as stored.
|
|
603
786
|
const engagement = formatEngagement(t.upvotes, t.commentCount);
|
|
604
787
|
const engagementLine = engagement ? `\n ${engagement}` : '';
|
|
605
|
-
|
|
788
|
+
// FUL-536: the source-type line, in the same position and the same words
|
|
789
|
+
// `list_community_signals` uses — one helper, so the two cannot drift (FUL-247:
|
|
790
|
+
// two surfaces over one dataset must not disagree about what is worth an agent's
|
|
791
|
+
// attention). It is stated in BOTH directions and is never suppressed; the rule
|
|
792
|
+
// and the wording of each exclusion live on `contentTypeProvenanceLine`.
|
|
793
|
+
//
|
|
794
|
+
// FUL-535 is what makes the negative branch the COMMON one here: the agent stamps
|
|
795
|
+
// only hosts the FUL-130 allowlist recognises, so a good thread on a forum nobody
|
|
796
|
+
// listed reaches this render with no `contentType` at all. Saying nothing would
|
|
797
|
+
// hand an agent a vendor page and a first-hand account as the same kind of thing.
|
|
798
|
+
//
|
|
799
|
+
// The exclusion wording holds for a scan that ATTACHED to a project: these threads
|
|
800
|
+
// are promoted into `community_signals`, where an unclassified row is excluded from
|
|
801
|
+
// grounding and from automatic synthesis. A standalone run persists nothing, so
|
|
802
|
+
// there is no grounding for it to be excluded from either — the line is a statement
|
|
803
|
+
// about the SOURCE, and it is never weaker than the truth.
|
|
804
|
+
//
|
|
805
|
+
// ⚠️ `_meta.threads` / `structuredContent` are deliberately NOT normalized.
|
|
806
|
+
// `ForumThreadSchema` is `.passthrough()` and `_meta.report_data` already ships the
|
|
807
|
+
// stored document verbatim, so rewriting one copy would make the two disagree about
|
|
808
|
+
// the same run. The trust CLAIM is made in this text, so the fail-closed normalizer
|
|
809
|
+
// sits here.
|
|
810
|
+
const provenanceLine = contentTypeProvenanceLine(t.contentType);
|
|
811
|
+
return `${header}${sentiment}${url}${quote}${engagementLine}${provenanceLine}`;
|
|
606
812
|
});
|
|
607
813
|
return (`Found ${threads.length} community thread${threads.length === 1 ? '' : 's'} for "${safeInline(topic, 120) ?? 'this topic'}":\n\n` +
|
|
608
814
|
`${lines.join('\n\n')}\n\n${persistenceLine}`);
|
|
@@ -645,6 +851,16 @@ async function handleScopedStartError(response, label) {
|
|
|
645
851
|
}
|
|
646
852
|
throw new ScopedResearchToolError(`Insufficient credits for this ${label.toLowerCase()}. Buy more at ${buyUrl}.` + projectReuseHint(parsed));
|
|
647
853
|
}
|
|
854
|
+
if (status === 403 && parsed?.code === 'PROJECT_LOCKED') {
|
|
855
|
+
// FUL-559: the project is subscription-locked and therefore read-only in
|
|
856
|
+
// full, so no paid run may start against it. Mapped explicitly because
|
|
857
|
+
// topping up credits does NOT clear this — the generic fallback would send
|
|
858
|
+
// the agent looking for a credit problem it cannot fix.
|
|
859
|
+
throw new ScopedResearchToolError((parsed?.error ??
|
|
860
|
+
parsed?.message ??
|
|
861
|
+
'This project is locked due to subscription limits. Upgrade to Pro at ' +
|
|
862
|
+
'https://clien.ai/app/billing to start research on it.') + projectReuseHint(parsed));
|
|
863
|
+
}
|
|
648
864
|
if (status === 429 && parsed?.code === 'RUNAWAY_BACKSTOP_EXCEEDED') {
|
|
649
865
|
// FUL-27/73 HARD runaway backstop, now reachable on the scoped rail since
|
|
650
866
|
// its debit moved into the start route (FUL-73 reserve ordering). Same
|
|
@@ -669,6 +885,18 @@ async function handleScopedStartError(response, label) {
|
|
|
669
885
|
? `${base} Blocking job_id: ${parsed.job_id} — call clien_research_status with this job_id to re-attach and poll it.`
|
|
670
886
|
: base);
|
|
671
887
|
}
|
|
888
|
+
if (status === 503 && parsed?.code === 'FEATURE_UNAVAILABLE') {
|
|
889
|
+
// FUL-479 kill switch. Distinguished from the circuit breaker below because the two ask for
|
|
890
|
+
// OPPOSITE responses: the breaker is a transient outage and "try again in 30 minutes" is the
|
|
891
|
+
// right advice, while this is a capability the deployment has not switched on — retrying will
|
|
892
|
+
// return the same 503 forever. Nothing was started and nothing was charged, and the agent is
|
|
893
|
+
// told to stop rather than to wait.
|
|
894
|
+
throw new ScopedResearchToolError((parsed?.error ??
|
|
895
|
+
parsed?.message ??
|
|
896
|
+
'This capability is not available on this Clien.ai deployment yet.') +
|
|
897
|
+
' Nothing was started and no credits were used. Do not retry — use `get_market` to read ' +
|
|
898
|
+
'whatever market data the project already holds.');
|
|
899
|
+
}
|
|
672
900
|
if (status === 503 && parsed?.code === 'CIRCUIT_BREAKER_OPEN') {
|
|
673
901
|
throw new ScopedResearchToolError(parsed?.error ?? parsed?.message ?? 'Our research infrastructure is experiencing issues. Please try again in 30 minutes.');
|
|
674
902
|
}
|