@rodrigobeber/patoai-dtos 4.8.21 → 4.8.22

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.
@@ -20,15 +20,31 @@ export interface LabActionParam {
20
20
  unit?: string;
21
21
  options?: LabActionOption[];
22
22
  }
23
+ /**
24
+ * Como o usuário volta atrás depois de aplicar. É isto — e não o verbo da operação — que define quanto
25
+ * atrito o diálogo impõe.
26
+ * historico → dá para restaurar a versão anterior pela tela (ex.: roteiro)
27
+ * tela → dá para reeditar/refazer na mão (o valor antigo está no próprio diálogo)
28
+ * nenhuma → não volta: o valor antigo se perde no momento em que aplica
29
+ */
30
+ export type LabActionReversible = 'historico' | 'tela' | 'nenhuma';
23
31
  export interface LabAction {
24
32
  id: string;
25
- op: 'update' | 'create';
33
+ op: 'update' | 'create' | 'delete';
26
34
  render: LabActionRender;
27
35
  title: string;
28
36
  path: string;
29
37
  summary: string;
30
38
  params: LabActionParam[];
39
+ reversible: LabActionReversible;
31
40
  undoHint: string;
41
+ /**
42
+ * O que mais quebra junto, quando o alvo é referenciado em outro lugar (mídia usada em roteiro,
43
+ * template usado em lembrete, estágio com leads dentro). O texto ESTÁTICO fica aqui; a lista do que
44
+ * de fato depende deste item é calculada na materialização e vai em `SupportLabProposalDto.impact`.
45
+ * Cascata é o que o cartão do item NÃO mostra — é por isso que ela precisa ser explícita.
46
+ */
47
+ impactHint?: string;
32
48
  }
33
49
  /** Uma linha "Antes -> Depois" já formatada em pt-BR (render 'field' e 'item'). */
34
50
  export interface LabProposalChangeDto {
@@ -10,8 +10,11 @@
10
10
  // chamada da Oráculo, porque schema de tool entra no prefixo cacheado.
11
11
  //
12
12
  // A IA NUNCA aplica: a proposta é um formulário pré-preenchido e quem aplica é o usuário, pelo diálogo,
13
- // no endpoint REST normal — com o guard que já existe. Por isso não há `delete` no catálogo: sem
14
- // exclusão não existe perda de dado possível por sugestão de IA.
13
+ // no endpoint REST normal — com o guard que já existe.
14
+ //
15
+ // O eixo de risco NÃO é update × delete (apagar um roteiro é SOFT delete, com restaurar na tela; já
16
+ // reescrever um campo do contexto sobrescreve sem histórico nenhum). O que decide o atrito é
17
+ // `reversible` + `impact`, e o diálogo escala: aplicar direto → caixa de aviso → confirmação digitada.
15
18
  Object.defineProperty(exports, "__esModule", { value: true });
16
19
  exports.LAB_ACTIONS = void 0;
17
20
  exports.findLabAction = findLabAction;
@@ -29,6 +32,7 @@ exports.LAB_ACTIONS = [
29
32
  title: 'Roteiro',
30
33
  path: 'Configurações → Agente → Prompts',
31
34
  summary: 'Reescrever o texto de um roteiro do agente (informe o id do roteiro).',
35
+ reversible: 'historico',
32
36
  undoHint: 'Configurações → Agente → Prompts: o roteiro tem histórico e dá para restaurar a versão anterior.',
33
37
  params: [
34
38
  {
@@ -50,7 +54,10 @@ exports.LAB_ACTIONS = [
50
54
  title: 'Contexto básico',
51
55
  path: 'Configurações → Agente → Contexto Básico',
52
56
  summary: 'Reescrever um campo do contexto básico (sobre, papel, público ou comportamento).',
53
- undoHint: 'Configurações Agente Contexto Básico: para editar o campo de novo a qualquer momento.',
57
+ // O endpoint sobrescreve sem gravar histórico: o texto antigo existe no diálogo, e some no
58
+ // instante em que aplica. Por isso é 'nenhuma' — e leva mais atrito que o roteiro, que tem restaurar.
59
+ reversible: 'nenhuma',
60
+ undoHint: 'Este campo não tem histórico: copie o texto atual antes de aplicar se quiser poder voltar.',
54
61
  params: [
55
62
  {
56
63
  name: 'field', kind: 'enum', identity: true, required: true, options: CONTEXT_FIELDS,
@@ -1,7 +1,7 @@
1
1
  import { SupportMessageDto } from "./support-message.dto";
2
2
  import { SupportAgentBalanceDto } from "./support-agent-balance.dto";
3
3
  import { SupportLabPendingAnalysisDto } from "./support-lab-analyze.dto";
4
- import { LabActionRender, LabProposalChangeDto } from "./lab-action-catalog";
4
+ import { LabActionRender, LabActionReversible, LabProposalChangeDto } from "./lab-action-catalog";
5
5
  export interface SupportLabFocusDto {
6
6
  idStage?: number;
7
7
  runType?: string;
@@ -25,7 +25,14 @@ export interface SupportLabProposalDto {
25
25
  path: string;
26
26
  params: Record<string, unknown>;
27
27
  rationale: string;
28
+ reversible: LabActionReversible;
28
29
  undoHint: string;
30
+ /**
31
+ * O que quebra junto se aplicar (mídia usada em roteiro, template usado em lembrete...). Calculado na
32
+ * materialização, não estático: é o que o cartão do item NÃO mostra. Lista não-vazia => confirmação
33
+ * digitada no diálogo.
34
+ */
35
+ impact?: string[];
29
36
  kind?: 'markdown' | 'spin-yaml';
30
37
  baseText?: string;
31
38
  proposedText?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rodrigobeber/patoai-dtos",
3
- "version": "4.8.21",
3
+ "version": "4.8.22",
4
4
  "description": "Data Transfer Objects for PatoAI",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",