@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.
@@ -14,15 +14,18 @@
14
14
  */
15
15
  import { zodToInputSchema } from './schema.js';
16
16
  import { normalizeParamAliases } from './param-aliases.js';
17
+ import { CONTENT_TYPE_DIGEST_ADVERT, CONTENT_TYPE_EXCLUSIONS, CONTENT_TYPE_STATES, } from './content-type-display.js';
17
18
  import { ResearchInputSchema, runResearch } from './research.js';
18
19
  import { StatusInputSchema, getResearchStatus } from './status.js';
19
20
  import { ListProjectsInputSchema, CreateProjectInputSchema, GetProjectInputSchema, listProjects, createProject, getProject, } from './projects.js';
20
- import { CreatePersonaInputSchema, CREATE_PERSONA_ALIASES, createPersona, GeneratePersonaInputSchema, GENERATE_PERSONA_ALIASES, generatePersona, EnrichPersonaInputSchema, ENRICH_PERSONA_ALIASES, enrichPersona, ListPersonasInputSchema, listPersonas, GetPersonaInputSchema, getPersona, UpdatePersonaInputSchema, UPDATE_PERSONA_ALIASES, updatePersona, } from './personas.js';
21
+ import { CreatePersonaInputSchema, CREATE_PERSONA_ALIASES, createPersona, GeneratePersonaInputSchema, GENERATE_PERSONA_ALIASES, generatePersona, EnrichPersonaInputSchema, ENRICH_PERSONA_ALIASES, enrichPersona, ListPersonasInputSchema, listPersonas, GetPersonaInputSchema, getPersona, UpdatePersonaInputSchema, UPDATE_PERSONA_ALIASES, updatePersona, UpdatePersonaIdentityPriorsInputSchema, updatePersonaIdentityPriors, } from './personas.js';
21
22
  import { ListReportsInputSchema, GetReportInputSchema, listReports, getReport, } from './reports.js';
22
23
  import { InterviewPersonaInputSchema, INTERVIEW_PERSONA_ALIASES, interviewPersona, ListInterviewsInputSchema, listInterviews, GetInterviewInputSchema, getInterview, } from './interview.js';
23
- import { FORUM_SOURCES_ADVERT, ScanCompetitorsInputSchema, scanCompetitors, SearchForumsInputSchema, searchForums, } from './scoped-research.js';
24
- import { ListCompetitorsInputSchema, listCompetitors, ListCommunitySignalsInputSchema, listCommunitySignals, } from './collections.js';
25
- import { GET_PERSONA_OUTPUT_SCHEMA, GET_REPORT_OUTPUT_SCHEMA, GET_INTERVIEW_OUTPUT_SCHEMA, LIST_PERSONAS_OUTPUT_SCHEMA, LIST_PROJECTS_OUTPUT_SCHEMA, LIST_INTERVIEWS_OUTPUT_SCHEMA, LIST_REPORTS_OUTPUT_SCHEMA, LIST_COMPETITORS_OUTPUT_SCHEMA, LIST_COMMUNITY_SIGNALS_OUTPUT_SCHEMA, } from './output-schemas.js';
24
+ import { FORUM_SOURCES_ADVERT, ScanCompetitorsInputSchema, scanCompetitors, SearchForumsInputSchema, searchForums, ScanMarketInputSchema, scanMarket, } from './scoped-research.js';
25
+ import { ListCompetitorsInputSchema, listCompetitors, ListCommunitySignalsInputSchema, listCommunitySignals, GetMarketInputSchema, getMarket, } from './collections.js';
26
+ import { ListInterviewScriptsInputSchema, listInterviewScripts, } from './interview-scripts.js';
27
+ import { GetCreditBalanceInputSchema, getCreditBalance } from './credits.js';
28
+ import { GET_PERSONA_OUTPUT_SCHEMA, GET_REPORT_OUTPUT_SCHEMA, GET_INTERVIEW_OUTPUT_SCHEMA, LIST_PERSONAS_OUTPUT_SCHEMA, LIST_PROJECTS_OUTPUT_SCHEMA, LIST_INTERVIEWS_OUTPUT_SCHEMA, LIST_REPORTS_OUTPUT_SCHEMA, LIST_COMPETITORS_OUTPUT_SCHEMA, LIST_COMMUNITY_SIGNALS_OUTPUT_SCHEMA, GET_MARKET_OUTPUT_SCHEMA, LIST_INTERVIEW_SCRIPTS_OUTPUT_SCHEMA, GET_CREDIT_BALANCE_OUTPUT_SCHEMA, } from './output-schemas.js';
26
29
  /**
27
30
  * `paramAliases` defaults to `{}` — a tool with no legacy spellings declares
28
31
  * nothing. The handler is wrapped rather than each tool calling the normalizer
@@ -82,6 +85,71 @@ const HOST_SIDE_OPEN_QUESTIONS_ADVERT = 'The typed `openQuestions[]` field is mi
82
85
  '`_meta.report_data.openQuestions`; because host `_meta` is not reliably model-visible, YOU ' +
83
86
  'should use the model-visible result text\'s `## Open Questions` section. ' +
84
87
  OPEN_QUESTION_STATUSES_ADVERT;
88
+ /**
89
+ * FUL-540, extended by FUL-545. The one fact every ENTITY-side advert for
90
+ * `seniority` / `careerPath` has to carry, in one place so the surfaces cannot
91
+ * drift apart.
92
+ *
93
+ * These columns shipped as pure research output and every advert said so; FUL-488
94
+ * made them editable on the web persona profile, which turned those adverts into a
95
+ * claim that a value a person typed came from a research run.
96
+ *
97
+ * ⚠️ FUL-545 ADDED A THIRD ORIGIN — `update_persona_identity_priors` writes both
98
+ * fields over this server, so the previous wording ("read-only through this
99
+ * server") is retired. The count matters: an advert naming two origins while
100
+ * three exist is the same defect in a smaller costume. Nothing on the row
101
+ * distinguishes them — `personas.authorship` is row-level and its trigger's
102
+ * `UPDATE OF validation_job_id, authorship` column list means a scalar-only
103
+ * write never fires it — so the honest advert states ALL THREE and refuses the
104
+ * field as a signal.
105
+ *
106
+ * ⚠️ Exported for reuse, NOT for the guard to assert against. The FUL-540 tests in
107
+ * `agent-visible-output.test.ts` deliberately match literals: an assertion built
108
+ * from this constant would move with it, so gutting the constant would keep the
109
+ * suite green (the absolute-anchor trap that nearly cost PR #744 a proof). One
110
+ * test pins this text absolutely; every other assertion stays independent of it.
111
+ *
112
+ * `update_persona` deliberately does NOT use this: its sentence is about which
113
+ * TOOL patches these fields, which is a different fact that happens to touch the
114
+ * same two columns.
115
+ */
116
+ export const IDENTITY_PRIORS_EDITABILITY_ADVERT = 'user-editable in the web app and writable here through ' +
117
+ '`update_persona_identity_priors`, and nothing records whether a given value came from a ' +
118
+ 'research run, from an agent, or from a person typing it — so they are not a research signal';
119
+ /**
120
+ * FUL-510. The run-level verdict rationale, advertised on all three tools that return a
121
+ * report, because all three now render it.
122
+ *
123
+ * ⚠️ THE ABSENCE CLAUSE IS THE LOAD-BEARING HALF. The block renders nothing when the run
124
+ * stored no rationale — no placeholder, by design — so a caller only ever learns from this
125
+ * advert that absence is normal and what to do about it. Without that sentence the silent
126
+ * case is precisely where an agent invents a rationale out of the verdict counts, which is
127
+ * the fabrication the producer field exists to prevent (DESIGN.md forbids the web renderer
128
+ * the same move).
129
+ *
130
+ * Everything channel-independent lives here; the typed field's PATH differs per tool, so it
131
+ * is stated by the two wrappers below rather than named once and left unqualified.
132
+ */
133
+ const VERDICT_RATIONALE_ADVERT_CORE = '1-2 sentences the agent wrote at synthesis time saying WHY the overall verdict came out ' +
134
+ 'this way. It is RETRIEVED, not derived — never recompute or paraphrase it from the verdict ' +
135
+ 'counts or the confidence number. It is often ABSENT, which is normal and not an error: the ' +
136
+ 'run may predate the field, have written none, or have had it withdrawn because a robustness ' +
137
+ 're-ask downgraded a verdict it argued for. When it is absent, say no rationale was recorded ' +
138
+ 'rather than inferring one. ';
139
+ /** `get_report` returns a declared output schema, so the typed field is model-reachable. */
140
+ const STRUCTURED_VERDICT_RATIONALE_ADVERT = 'When the run wrote one, its own verdict rationale is rendered in the result text under ' +
141
+ '"## Verdict rationale", and typed at `structuredContent.report_data.verdictSummary`: ' +
142
+ VERDICT_RATIONALE_ADVERT_CORE;
143
+ /**
144
+ * `clien_research` / `clien_research_status` carry `report_data` on host-side `_meta` ONLY,
145
+ * which is not reliably model-visible (same split as `HOST_SIDE_OPEN_QUESTIONS_ADVERT`).
146
+ * Pointing a caller at that path unqualified would offer it a channel it may not have; the
147
+ * rendered text is the one it definitely does.
148
+ */
149
+ const HOST_SIDE_VERDICT_RATIONALE_ADVERT = 'When the run wrote one, its own verdict rationale is rendered in the model-visible result ' +
150
+ 'text under "## Verdict rationale" — READ IT THERE. The typed field is mirrored for your MCP ' +
151
+ 'client at host-side `_meta.report_data.verdictSummary`, which is not reliably model-visible: ' +
152
+ VERDICT_RATIONALE_ADVERT_CORE;
85
153
  const STRUCTURED_OPEN_QUESTIONS_ADVERT = 'The typed `openQuestions[]` field is returned at ' +
86
154
  '`structuredContent.report_data.openQuestions`, where it lists what the run did not settle. ' +
87
155
  OPEN_QUESTION_STATUSES_ADVERT;
@@ -95,6 +163,12 @@ export const TOOLS = [
95
163
  'market/competitor spine, which personas are ⚠️ QA-FLAGGED, the anti-sycophancy readout, and ' +
96
164
  'which hypothesis verdicts FLIPPED under rephrasing (with the downgraded verdict to act on ' +
97
165
  'instead). When a section is missing the digest says so — absent is not clean. ' +
166
+ // FUL-560. `clien_research` renders the SAME digest through `composeReportText`, so it emits
167
+ // the same `source type:` lines and owes the same explanation — an agent that runs the hero
168
+ // tool and never calls `get_report` would otherwise meet the vocabulary for the first time in
169
+ // its own output. Shared constant, not a copy: the wording is pinned across every surface by
170
+ // `content-type-display.test.ts`, which DERIVES the tools owing it from the handler sources.
171
+ `The digest also states ${CONTENT_TYPE_DIGEST_ADVERT} ` +
98
172
  'The full structured report_data (hypotheses, competitors[], key findings) is mirrored to ' +
99
173
  'host-side `_meta.report_data` for programmatic use by your MCP client; everything YOU need ' +
100
174
  'to reason is already in the result text above it. ' +
@@ -133,6 +207,7 @@ export const TOOLS = [
133
207
  '(a recalled analyst estimate), but treat it as unconfirmed, NOT as a checked fact. Neither reading ' +
134
208
  'is ever counted as grounded. ' +
135
209
  '(6) ' + HOST_SIDE_OPEN_QUESTIONS_ADVERT +
210
+ HOST_SIDE_VERDICT_RATIONALE_ADVERT +
136
211
  'Typical wall time 15-25 minutes; progress ' +
137
212
  'is streamed via notifications/progress. ' +
138
213
  'This hero tool runs the whole curated pipeline in one call. PREFER it over hand-assembling ' +
@@ -161,11 +236,15 @@ export const TOOLS = [
161
236
  'on the backend; this tool re-attaches a read view) and to poll for completion. ' +
162
237
  'If the job is complete, returns the full markdown report — followed in the same text by the ' +
163
238
  'same machine-checked TRUST DIGEST `clien_research` renders (claim states + receipt ids, ' +
164
- 'QA-flagged personas, anti-sycophancy readout, flipped verdicts). The structured ' +
165
- 'report_data behind that digest is mirrored to host-side `_meta`, the same shape ' +
239
+ 'QA-flagged personas, anti-sycophancy readout, flipped verdicts). ' +
240
+ // FUL-560 — third renderer of the same digest; see the note on `clien_research` above.
241
+ `The digest also states ${CONTENT_TYPE_DIGEST_ADVERT} ` +
242
+ 'The structured report_data behind that digest is mirrored to host-side `_meta`, the same ' +
243
+ 'shape ' +
166
244
  '`clien_research` would have returned, but it is the result text you read. A recovered run ' +
167
245
  'therefore loses none of the trust signal a completed run would have shown. ' +
168
246
  HOST_SIDE_OPEN_QUESTIONS_ADVERT +
247
+ HOST_SIDE_VERDICT_RATIONALE_ADVERT +
169
248
  'If the job is still running, returns a brief status summary. If the job failed or ' +
170
249
  'was cancelled, returns the failure reason. ' +
171
250
  'RECOVERY WITHOUT A JOB_ID: if the -32000 drop left you with no job_id, call this tool ' +
@@ -213,6 +292,43 @@ export const TOOLS = [
213
292
  zodSchema: ScanCompetitorsInputSchema,
214
293
  handler: (args, deps) => scanCompetitors(args, deps),
215
294
  }),
295
+ defineTool({
296
+ name: 'scan_market',
297
+ description: 'Research a MARKET — how big it is, whether it is growing, what is moving it, and what it ' +
298
+ 'does not serve. A targeted, cheaper alternative to the full clien_research report when you ' +
299
+ 'only need the MARKET dimension. Runs one market researcher over news and financial-report ' +
300
+ 'sources (not the whole H1-H8 pipeline): typical wall time 2-10 minutes, progress streamed ' +
301
+ 'via notifications/progress. Returns the market size, the growth trend, every atomic figure ' +
302
+ 'the run recorded with the scope the source named, the key trends, and the positioning gaps ' +
303
+ '— the same five things it publishes to the web app\'s Research → Market tab. All of it is ' +
304
+ 'rendered into the result text you can read; the same block is also mirrored to host-side ' +
305
+ '`_meta.market` for your MCP client. ' +
306
+ 'IT DOES NOT DISCOVER COMPETITORS, and it leaves the competitor and community dossiers ' +
307
+ 'completely untouched — use `scan_competitors` for the landscape and `search_forums` for ' +
308
+ 'user voice. ' +
309
+ 'TRUST: the figures are UNGRADED on this surface — no per-figure source state is attached, ' +
310
+ 'and the absence of a marker is not a clean bill of health. A figure carrying no scope label ' +
311
+ 'is a market SIZE whose slice the source never named; it is NOT a defaulted "total ' +
312
+ 'addressable market". A run that recorded nothing says so explicitly, and that means the RUN ' +
313
+ 'found no figures — never that the market is small, absent, or zero. ' +
314
+ 'CHECK THE FREE READ FIRST: `get_market` returns the market snapshot the project already ' +
315
+ 'holds, at no credit cost, with the id of the run that produced it. Read it (or ' +
316
+ '`get_project`) before spending here. Use this tool when you need a FRESH read or the ' +
317
+ 'project has no market data yet. ' +
318
+ 'ATTACH TO A PROJECT so results are saved: pass `project_id` for an existing project, or ' +
319
+ '`project_name` to auto-create one. Without either, the research still returns here but does ' +
320
+ 'NOT persist. ' +
321
+ '⚠️ IT REPLACES THE WHOLE MARKET SNAPSHOT. A project has ONE market record, written by one ' +
322
+ 'run, so a successful scan replaces every field — including emptying a list this run did not ' +
323
+ 'establish. That is what keeps the record and its source run honest about each other; it is ' +
324
+ 'not a merge. ' +
325
+ 'This debits credits (a scoped market run). ' +
326
+ 'IMPORTANT: if the call drops mid-flight with "MCP error -32000", the job keeps running on ' +
327
+ 'the backend — do NOT blindly re-call (that starts a new run and debits again); the job_id ' +
328
+ 'is logged to the MCP server stderr as `[clien-mcp] scan_market started job_id=…`.',
329
+ zodSchema: ScanMarketInputSchema,
330
+ handler: (args, deps) => scanMarket(args, deps),
331
+ }),
216
332
  defineTool({
217
333
  name: 'search_forums',
218
334
  description: `Search real community discussions (${FORUM_SOURCES_ADVERT}) for PRODUCT-VALIDATION ` +
@@ -220,7 +336,8 @@ export const TOOLS = [
220
336
  'report when you only need the COMMUNITY dimension. Runs one forum researcher (not the whole ' +
221
337
  'H1-H8 pipeline): typical wall time 2-10 minutes, progress streamed via notifications/progress. ' +
222
338
  'Renders every thread into the result text — title, platform, url, ' +
223
- 'sentimentSummary, its first cached quote, and engagement (upvotes · comments) ONLY when the ' +
339
+ 'sentimentSummary, its first cached quote, its `source type:` line, and engagement ' +
340
+ '(upvotes · comments) ONLY when the ' +
224
341
  'thread carries a real, non-zero count — an absent engagement line means the counters were ' +
225
342
  'either never measured or genuinely zero on both sides — the render cannot tell those apart, so ' +
226
343
  'do not read a missing line as low traction. When a thread cached more than one quote the row says so — ' +
@@ -235,6 +352,19 @@ export const TOOLS = [
235
352
  'each thread\'s cached verbatim `relevantQuotes[]`, the same field this tool returns. Read it ' +
236
353
  '(or `get_project`) before spending here, so you do not pay to rediscover user voice the ' +
237
354
  'project already holds. Use this tool when you need FRESH threads or the project has none yet. ' +
355
+ // FUL-536. Same reason `list_community_signals` states this below: a tool description is an
356
+ // executable interface, read BEFORE the first call, so a trust qualifier that exists only in
357
+ // the rendered output is discoverable one call too late. Both surfaces render the same rows,
358
+ // so describing one dataset two ways is the FUL-247 divergence this issue exists to close.
359
+ // Held word-for-word by hand until FUL-560 needed a third copy for `get_report` — at which
360
+ // point a convention kept by comment stopped being one, and the wording became a constant.
361
+ `SOURCE TYPE: every thread carries a \`source type:\` line — ${CONTENT_TYPE_STATES} The type ` +
362
+ 'is stamped from the host by code, never written by a model, and only hosts the forum ' +
363
+ 'allowlist recognises get one — so `unclassified` is COMMON. ' +
364
+ // Both exclusions are real, both are enforced, and they stay worded separately on purpose —
365
+ // the argument lives on `CONTENT_TYPE_EXCLUSIONS` (`content-type-display.ts`), which since
366
+ // FUL-560 is the ONE copy of these two sentences rather than the second of six.
367
+ `${CONTENT_TYPE_EXCLUSIONS} ` +
238
368
  'ATTACH TO A PROJECT so results are saved to the web app\'s Research → Community tab: pass ' +
239
369
  '`project_id` for an existing project, or `project_name` to auto-create one. Without either, the ' +
240
370
  'threads are returned here but NOT persisted. ' +
@@ -381,9 +511,10 @@ export const TOOLS = [
381
511
  'to find one. This is the KEYSTONE discovery read: it surfaces personas created in the ' +
382
512
  'web app too, so you can get a persona `id` to pass to `get_persona`, `update_persona`, ' +
383
513
  '`enrich_persona`, or `interview_persona` — previously an agent could only reach personas ' +
384
- 'it created in the same session. Each entry carries read-only `seniority` / `careerPath` ' +
385
- 'when the persona has identity grounding; forum sources and `identityProvenance` live in ' +
386
- '`report_data` (read them via `get_report`). ' +
514
+ 'it created in the same session. Each entry carries `seniority` / `careerPath` when the ' +
515
+ `persona has them — ${IDENTITY_PRIORS_EDITABILITY_ADVERT}. The ` +
516
+ 'run-written priors, forum sources and `identityProvenance` all live in `report_data` ' +
517
+ '(read them via `get_report`). ' +
387
518
  'Read-only: no credit cost, no side effects.',
388
519
  zodSchema: ListPersonasInputSchema,
389
520
  outputSchema: LIST_PERSONAS_OUTPUT_SCHEMA,
@@ -394,18 +525,21 @@ export const TOOLS = [
394
525
  description: 'Fetch a single persona by its `persona_id` (from a `list_personas` entry, or the id printed ' +
395
526
  'by `create_persona` / `generate_persona`). Returns the FULL persona profile as readable ' +
396
527
  'text — name, role, company, company size, industry, location, the background/description ' +
397
- 'paragraph, provenance (`source`), lock state, and the read-only identity priors ' +
398
- '(`seniority` / `careerPath`) when the persona has them — so you can read the persona you ' +
528
+ 'paragraph, provenance (`source`), lock state, and `seniority` / `careerPath` when the ' +
529
+ 'persona has them — so you can read the persona you ' +
399
530
  'are about to interview or correct without any further call. The same record is also ' +
400
531
  'returned as `structuredContent.persona` (and mirrored in `_meta.persona`) for programmatic ' +
401
532
  'use. Use it to inspect a persona before correcting it with `update_persona` or ' +
402
- 'interviewing it with `interview_persona`. TRUST: this is the persona ENTITY. The identity ' +
403
- 'priors are the ONE piece of grounding it carries (FLAT fields here; `get_report` nests the ' +
404
- 'same two names under `report_data.personas[].identityPriors`), and they are ' +
405
- 'aggregate-calibrated, never span-receipted — so they are not evidence you can follow to a ' +
406
- 'source. Forum receipts (`sources[]`) and `identityProvenance` remain `report_data` only, ' +
407
- 'read them with `get_report`. Treat every other field here as unverified profile data until ' +
408
- 'you have checked it there. Read-only: no credit cost, no side effects.',
533
+ 'interviewing it with `interview_persona`. TRUST: this is the persona ENTITY and none of it ' +
534
+ `is evidence. \`seniority\` / \`careerPath\` are ${IDENTITY_PRIORS_EDITABILITY_ADVERT}. ` +
535
+ 'Even run-written ' +
536
+ 'ones are aggregate-calibrated, never span-receipted, so they are not evidence you can ' +
537
+ 'follow to a source. `get_report` is where the run-written copy lives WHEN A RUN PRODUCED ' +
538
+ 'ONE (nested under `report_data.personas[].identityPriors`, unreachable by editing; absent ' +
539
+ 'on a persona that never had a run), along with forum ' +
540
+ 'receipts (`sources[]`) and `identityProvenance`. Treat every other field here as ' +
541
+ 'unverified profile data until you have checked it there. Read-only: no credit cost, no ' +
542
+ 'side effects.',
409
543
  zodSchema: GetPersonaInputSchema,
410
544
  outputSchema: GET_PERSONA_OUTPUT_SCHEMA,
411
545
  handler: (args, deps) => getPersona(args, deps),
@@ -425,11 +559,37 @@ export const TOOLS = [
425
559
  'discover a persona with `list_personas`, fix it here, then `interview_persona`. Rejected ' +
426
560
  'with a 404 if you do not own the persona (call `list_personas` to confirm the id); a persona ' +
427
561
  'locked by subscription limits is refused separately with an upgrade prompt. ' +
428
- 'Identity priors (seniority / career path) are not editable here.',
562
+ 'Identity priors (`seniority` / `careerPath`) are not among this tool\'s fields — ' +
563
+ '`update_persona_identity_priors` is the tool that writes those two. That is a routing ' +
564
+ 'split, not a restriction on the values: the user CAN edit both in the web app and you ' +
565
+ 'CAN write both through that tool, so never report them to anyone as immutable or as ' +
566
+ 'research-derived.',
429
567
  zodSchema: UpdatePersonaInputSchema,
430
568
  paramAliases: UPDATE_PERSONA_ALIASES,
431
569
  handler: (args, deps) => updatePersona(args, deps),
432
570
  }),
571
+ defineTool({
572
+ name: 'update_persona_identity_priors',
573
+ description: 'Set a persona\'s identity priors — `seniority` (the RUNG: a level of responsibility ' +
574
+ 'like "senior IC" or "team lead", not a job title) and `careerPath` (the trajectory, ' +
575
+ 'e.g. "support → product ops → PM"). Supply `persona_id` and at least one of `seniority`, ' +
576
+ '`career_path`; only the field you pass changes, and an empty string clears it. These two ' +
577
+ 'live on their own tool because they are written only by named writers, never by a ' +
578
+ 'general persona patch — `update_persona` handles the ordinary scalars. This is a FREE, ' +
579
+ 'unmetered ' +
580
+ 'explicit edit: it does NOT use the AI or debit a credit (use `enrich_persona` to have a ' +
581
+ 'model fill blank fields instead). Rejected with a 404 if you do not own the persona ' +
582
+ '(call `list_personas` to confirm the id); a persona locked by subscription limits is ' +
583
+ 'refused separately with an upgrade prompt. ' +
584
+ 'TRUST: these fields are user-editable in the web app and writable here, and NOTHING ' +
585
+ 'records whether a stored value came from a research run, from an agent, or from a person ' +
586
+ 'typing it — so writing one does not make it grounding, and reading one back later is not ' +
587
+ 'a research signal. What a run produced stays at ' +
588
+ '`report_data.personas[].identityPriors` (read it with `get_report`), which this write ' +
589
+ 'does not touch — so overwriting here never destroys the run\'s own record.',
590
+ zodSchema: UpdatePersonaIdentityPriorsInputSchema,
591
+ handler: (args, deps) => updatePersonaIdentityPriors(args, deps),
592
+ }),
433
593
  defineTool({
434
594
  name: 'list_reports',
435
595
  description: 'List the caller\'s past `clien_research` runs (newest first, paginated by `limit`). ' +
@@ -463,15 +623,23 @@ export const TOOLS = [
463
623
  'was read and independently vouched but no exact span pinned (NOT a receipt), and an unmarked ' +
464
624
  'NO_RECEIPT is recalled model knowledge, unverified. Neither counts as grounded — key on the ' +
465
625
  'state, never on whether a source id is present. ' +
466
- '(3) per-persona QA — a ⚠️ QA-FLAGGED persona failed a quality check (or could not be checked ' +
626
+ // FUL-560. Third surface for this vocabulary, and the one an agent reaches after a PAID run.
627
+ // The two exclusion sentences come from the shared constant rather than a hand-copy — the
628
+ // receipt pools had no wording at all, and adding a fifth spelling to fix that is the FUL-247
629
+ // drift the constant exists to prevent. The persona pool states its invariant once and marks
630
+ // only the rows that break it, so an agent is told to expect nothing on a well-formed
631
+ // `user_voice` receipt; the market/competitor pool states every row.
632
+ `(3) ${CONTENT_TYPE_DIGEST_ADVERT} ` +
633
+ '(4) per-persona QA — a ⚠️ QA-FLAGGED persona failed a quality check (or could not be checked ' +
467
634
  'at all); do not rely on its claims. Its `identityPriors` (seniority rung, career path) are ' +
468
635
  'typed enrichment and `identityProvenance` is a PII-free aggregate calibration line — NEVER a ' +
469
636
  'receipt, do not cite it as a source. ' +
470
- '(4) the anti-sycophancy readout — explicit rejection count, `lowDiscrimination` broken-persona ' +
637
+ '(5) the anti-sycophancy readout — explicit rejection count, `lowDiscrimination` broken-persona ' +
471
638
  'flags, and per-hypothesis disagreement splits. ' +
472
- '(5) hypothesis robustness — when a verdict FLIPPED under rephrasing the digest names the ' +
639
+ '(6) hypothesis robustness — when a verdict FLIPPED under rephrasing the digest names the ' +
473
640
  'downgraded verdict to act on instead of the reported one. ' +
474
641
  STRUCTURED_OPEN_QUESTIONS_ADVERT +
642
+ STRUCTURED_VERDICT_RATIONALE_ADVERT +
475
643
  'When a section is missing the digest SAYS SO ("NOT PRESENT on this run") — absent is not ' +
476
644
  'clean, so treat the corresponding prose as unverified. The full structured `report_data` ' +
477
645
  '(hypotheses, competitors[], key findings, and every field summarised above) is also returned ' +
@@ -508,7 +676,12 @@ export const TOOLS = [
508
676
  'the interview when you\'ve learned enough (5-12 turns is typical); `action:reopen` resumes a ' +
509
677
  'completed one. Interviews and their auto-summary/message-count behave exactly like the web app. ' +
510
678
  'Set `ephemeral:true` on `start` for a scratch interview excluded from the project\'s aggregate ' +
511
- 'insights. Compose with `create_persona` to validate a new market or pressure-test a pivot ' +
679
+ 'insights. ANCHOR IT: when the questions come from `list_interview_scripts`, pass that ' +
680
+ 'script\'s `hypothesisId` as `hypothesis_id` and the call\'s `sourceRun.id` as ' +
681
+ '`hypothesis_run_id` on `start` (both or neither). The interview stores which hypothesis it ' +
682
+ 'tested and returns it on `get_interview` / `list_interviews`, so the answers can be tied ' +
683
+ 'back without you carrying the id through the conversation; `start` tells you if the server ' +
684
+ 'did not record it. Compose with `create_persona` to validate a new market or pressure-test a pivot ' +
512
685
  '(see docs/recipes/); for a FULL validation report, prefer `clien_research` over stitching ' +
513
686
  'interviews together yourself. Each `turn` generates a real AI reply. Billing is a FLAT ' +
514
687
  '3-credit charge for the WHOLE interview, however many turns it runs: the first charging ' +
@@ -605,10 +778,129 @@ export const TOOLS = [
605
778
  'project FIRST saw a thread and that order is STABLE — a thread a later run sees again ' +
606
779
  'does not move back to page one. So page one is the newest DISCOVERIES, not the newest ' +
607
780
  'activity; do not read a thread\'s position as a recency signal. ' +
781
+ // FUL-341. A tool description is an executable interface: an agent reads it BEFORE its
782
+ // first call and is primed by it, so a trust qualifier that exists only in the rendered
783
+ // output is discoverable one call too late. Same reason `list_competitors` above names its
784
+ // TRUST states here rather than leaving them to be inferred from the text.
785
+ `SOURCE TYPE: every signal carries a \`source type:\` line — ${CONTENT_TYPE_STATES} ` +
786
+ // Both exclusions are real, both are enforced, and they stay worded separately on purpose —
787
+ // the argument lives on `CONTENT_TYPE_EXCLUSIONS` (`content-type-display.ts`), which since
788
+ // FUL-560 is the ONE copy of these two sentences rather than the second of six.
789
+ `${CONTENT_TYPE_EXCLUSIONS} ` +
608
790
  'Read-only: no credit cost, no side effects.',
609
791
  zodSchema: ListCommunitySignalsInputSchema,
610
792
  outputSchema: LIST_COMMUNITY_SIGNALS_OUTPUT_SCHEMA,
611
793
  handler: (args, deps) => listCommunitySignals(args, deps),
612
794
  }),
795
+ defineTool({
796
+ name: 'get_market',
797
+ description: 'Read a Clien.ai project\'s MARKET SNAPSHOT — the third cross-run research dossier, ' +
798
+ 'alongside `list_competitors` and `list_community_signals`. Returns market size, growth ' +
799
+ 'trend, key trends and positioning gaps as readable text, plus the id of the run that ' +
800
+ 'produced them and when it was last updated; the full record is also returned as ' +
801
+ '`structuredContent.market` (mirrored in `_meta`). Requires a `project_id` — call ' +
802
+ '`list_projects` to find one. ' +
803
+ // FUL-477 is the reason this tool exists and the most valuable thing it carries, so the
804
+ // description states it BEFORE first use: a tool description is an executable interface,
805
+ // and a provenance guarantee discovered only in the output is discovered one call too late.
806
+ 'ONE RUN, ONE SNAPSHOT: unlike the two collections, market is a SINGLETON — one row per ' +
807
+ 'project, replaced whole. Every field returned was written together by the single research ' +
808
+ 'run named in `sourceRunId`, never assembled from several runs, so a figure you quote can ' +
809
+ 'always be attributed to a specific run. Pass that id to `get_report` for the run behind ' +
810
+ 'the numbers. ' +
811
+ // Constraint 1 of the issue: absent must never read as zero or as a finding.
812
+ 'NO SNAPSHOT IS NOT AN EMPTY MARKET: a project can legitimately have none, because a ' +
813
+ 'completed run that did no web research writes nothing here. The tool says so explicitly ' +
814
+ 'and you must not convert it into a claim — "no market data on record" is the only ' +
815
+ 'statement it supports, never "the market is small", "unmeasured" or zero. A run that DID ' +
816
+ 'research the web and recorded nothing is reported as its own, differently-worded case. ' +
817
+ // Same shape as `list_competitors`' strengths/weaknesses sentence: a figure that reaches
818
+ // agent-visible text without a trust state reads as checked (FUL-247).
819
+ 'TRUST: the figures here carry NO trust state. A market figure\'s grounding lives in its ' +
820
+ 'source run\'s claim spine, not on the snapshot, so treat everything returned as recorded ' +
821
+ 'rather than verified — cite it only after reading the source run with `get_report`, whose ' +
822
+ 'market claims carry GROUNDED / SPECULATION / NO_RECEIPT states and their receipts. ' +
823
+ 'This is a free read of persisted state — it never researches anything. ' +
824
+ 'Read-only: no credit cost, no side effects.',
825
+ zodSchema: GetMarketInputSchema,
826
+ outputSchema: GET_MARKET_OUTPUT_SCHEMA,
827
+ handler: (args, deps) => getMarket(args, deps),
828
+ }),
829
+ defineTool({
830
+ name: 'list_interview_scripts',
831
+ description: 'Read the INTERVIEW SCRIPTS a Clien.ai research run wrote for a project — the questions ' +
832
+ 'that run decided are worth asking real people, one script per hypothesis, ranked ' +
833
+ 'least-settled first. Returns each script\'s hypothesis id, statement, verdict, ' +
834
+ 'confidence, who to recruit and its questions as readable text; the full set and the run ' +
835
+ 'it came from are also returned as `structuredContent.interviewScripts` / `.sourceRun` ' +
836
+ '(mirrored in `_meta`). Requires a `project_id` — call `list_projects` to find one. ' +
837
+ // The point of the tool, stated before first use: a tool description is an executable
838
+ // interface, and an agent that reads this AFTER inventing its own questions has already
839
+ // produced the unanchored interview this exists to prevent.
840
+ 'CALL THIS BEFORE `interview_persona`. These questions are anchored to the run\'s open ' +
841
+ 'hypotheses, so the answers feed back into its claim spine; questions you invent, or ' +
842
+ 're-derive from `get_report`\'s hypothesis list, are not, and re-deriving them is ' +
843
+ 'recomputing something the run already produced and stored. ' +
844
+ // Constraint 2 of FUL-514: a read path must never do model work.
845
+ 'STORED, NOT SUGGESTED: this is the persisted output of ONE SPECIFIC RUN, named in the ' +
846
+ 'result and written when that run executed. Nothing is generated to answer this call, ' +
847
+ 'now or ever — it is a free read of a report that is already immutable, so the verdict ' +
848
+ 'beside each script is that run\'s and may be older than today. ' +
849
+ 'NO SCRIPTS IS NOT "NOTHING WORTH ASKING": a project can legitimately have none, because ' +
850
+ 'scoped runs (`scan_competitors`, `search_forums`) never write them and a failed run ' +
851
+ 'writes nothing. The tool says so explicitly and you must not convert it into a claim ' +
852
+ 'that the hypotheses are settled. ' +
853
+ 'LINKAGE: pass a script\'s `hypothesisId` to `interview_persona action:start` as ' +
854
+ '`hypothesis_id`, together with this call\'s `sourceRun.id` as `hypothesis_run_id`. The ' +
855
+ 'interview then RECORDS which hypothesis it tested and hands it back on `get_interview` / ' +
856
+ '`list_interviews`, so the tie survives without you carrying the id. Both or neither — an ' +
857
+ 'id is only meaningful against the run that defined it. ' +
858
+ 'TRUST: the verdicts and confidences here are the source run\'s reading of its own ' +
859
+ 'hypotheses, not graded claims — no GROUNDED / SPECULATION / NO_RECEIPT states attach to ' +
860
+ 'them; read the source run with `get_report` for those. ' +
861
+ 'Read-only: no credit cost, no side effects.',
862
+ zodSchema: ListInterviewScriptsInputSchema,
863
+ outputSchema: LIST_INTERVIEW_SCRIPTS_OUTPUT_SCHEMA,
864
+ handler: (args, deps) => listInterviewScripts(args, deps),
865
+ }),
866
+ defineTool({
867
+ name: 'get_credit_balance',
868
+ // ⚠️ NOT ONE CREDIT NUMBER IN THIS DESCRIPTION, deliberately. Prices come back in
869
+ // the RESULT, derived server-side from `getActionCost()`; a figure written here
870
+ // would go stale at the next repricing and, being an advert, would be believed.
871
+ description: 'Read the account\'s CURRENT CREDIT BALANCE and what every metered action costs — the ' +
872
+ 'affordability check to run BEFORE committing to paid work. Returns the ledger balance, ' +
873
+ 'the spendable balance, and a per-action price list with how many of each the account ' +
874
+ 'could afford right now, as readable text; the same record is returned as ' +
875
+ '`structuredContent.credits` (mirrored in `_meta`). Takes no arguments — it reads the ' +
876
+ 'account you are authenticated as. ' +
877
+ // The point of the tool, stated before first use.
878
+ 'CALL THIS BEFORE PLANNING MULTIPLE PAID ACTIONS (`clien_research`, `interview_persona`, ' +
879
+ '`enrich_persona`, `generate_persona`, `scan_competitors`, `search_forums`). Without it ' +
880
+ 'the only way to learn the ceiling is to hit it — mid-plan, after some spend has already ' +
881
+ 'happened and the work is half-done. ' +
882
+ 'SPENDABLE IS THE NUMBER THAT GOVERNS, and it can be LOWER than the ledger balance: an ' +
883
+ 'anti-hoarding cap is applied when the balance is read. Budget with the spendable figure. ' +
884
+ // Constraint 2 of FUL-513. An agent that treats the read as a reservation will
885
+ // report a run it never started.
886
+ 'ADVISORY, NEVER A RESERVATION: the number is a reading, not a hold. It can change ' +
887
+ 'between this call and any spend, and the server\'s atomic debit remains the only ' +
888
+ 'authority on whether an action happens. A tool that refuses for insufficient credits has ' +
889
+ 'not been overridden by this reading — never report an action as done because the balance ' +
890
+ 'said you could afford it. ' +
891
+ // Constraint 1. Said in the advert as well as the result, because an agent that
892
+ // believes a top-up is somewhere on this surface will hunt for it.
893
+ 'READ-ONLY AND CANNOT SPEND: no top-up, no plan change, no checkout, no debit — and no ' +
894
+ 'other MCP tool adds credits either. If the balance is short, tell the account owner; ' +
895
+ 'buying credits is something they do themselves in the Clien.ai web app. ' +
896
+ 'PRICES ARE READ LIVE from the server on every call. Use the figures returned rather ' +
897
+ 'than any price you remember — they change. ' +
898
+ 'A FAILED READ IS NOT A ZERO BALANCE: this tool raises an error rather than report a ' +
899
+ 'balance it could not read, so treat an error as "unknown", never as "out of credits". ' +
900
+ 'Read-only: no credit cost, no side effects.',
901
+ zodSchema: GetCreditBalanceInputSchema,
902
+ outputSchema: GET_CREDIT_BALANCE_OUTPUT_SCHEMA,
903
+ handler: (args, deps) => getCreditBalance(args, deps),
904
+ }),
613
905
  ];
614
906
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}