@productmaker/mcp 12.12.1 → 12.13.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/dist/http.js +54 -7
- package/dist/stdio.js +54 -7
- package/package.json +3 -3
package/dist/http.js
CHANGED
|
@@ -19065,6 +19065,43 @@ var SaveAgentPlaybookSchema = z78.object({
|
|
|
19065
19065
|
requestId: RequestIdSchema.optional(),
|
|
19066
19066
|
body: z78.string().trim().min(1).max(AGENT_MEMORY_LIMITS.playbookChars)
|
|
19067
19067
|
}).strict();
|
|
19068
|
+
var AGENT_PENDING_OPERATION_TARGETS = [
|
|
19069
|
+
"campaign",
|
|
19070
|
+
"adset"
|
|
19071
|
+
];
|
|
19072
|
+
var MetaObjectIdSchema = z78.string().trim().regex(/^\d{1,30}$/u);
|
|
19073
|
+
var AgentPendingOperationSchema = z78.discriminatedUnion("type", [
|
|
19074
|
+
z78.object({
|
|
19075
|
+
type: z78.literal("meta_set_status"),
|
|
19076
|
+
target: z78.enum(AGENT_PENDING_OPERATION_TARGETS),
|
|
19077
|
+
objectId: MetaObjectIdSchema,
|
|
19078
|
+
status: z78.enum([
|
|
19079
|
+
"ACTIVE",
|
|
19080
|
+
"PAUSED"
|
|
19081
|
+
])
|
|
19082
|
+
}).strict(),
|
|
19083
|
+
z78.object({
|
|
19084
|
+
type: z78.literal("meta_set_daily_budget"),
|
|
19085
|
+
target: z78.enum(AGENT_PENDING_OPERATION_TARGETS),
|
|
19086
|
+
objectId: MetaObjectIdSchema,
|
|
19087
|
+
/** En unidades de la moneda (COP 80000, USD 25.5), no en las de Meta. */
|
|
19088
|
+
amount: z78.number().positive().max(1e9),
|
|
19089
|
+
currency: z78.string().trim().length(3).toUpperCase(),
|
|
19090
|
+
/** Lo que tenía al proponerlo (obligatorio): si ya no coincide, no se pisa. */
|
|
19091
|
+
expectedAmount: z78.number().positive().max(1e9)
|
|
19092
|
+
}).strict()
|
|
19093
|
+
]);
|
|
19094
|
+
var AGENT_PENDING_EXECUTION_OUTCOMES = [
|
|
19095
|
+
"applied",
|
|
19096
|
+
"skipped",
|
|
19097
|
+
"failed"
|
|
19098
|
+
];
|
|
19099
|
+
var AgentPendingExecutionSchema = z78.object({
|
|
19100
|
+
outcome: z78.enum(AGENT_PENDING_EXECUTION_OUTCOMES),
|
|
19101
|
+
/** Para el dueño, en palabras simples. */
|
|
19102
|
+
message: z78.string(),
|
|
19103
|
+
at: z78.string()
|
|
19104
|
+
});
|
|
19068
19105
|
var SaveAgentPendingAddSchema = z78.object({
|
|
19069
19106
|
type: z78.literal("pending_add"),
|
|
19070
19107
|
requestId: RequestIdSchema.optional(),
|
|
@@ -19074,7 +19111,9 @@ var SaveAgentPendingAddSchema = z78.object({
|
|
|
19074
19111
|
action: z78.string().trim().min(1).max(AGENT_MEMORY_LIMITS.shortTextChars),
|
|
19075
19112
|
dueAt: z78.string().datetime({
|
|
19076
19113
|
offset: true
|
|
19077
|
-
}).optional()
|
|
19114
|
+
}).optional(),
|
|
19115
|
+
/** Solo en `approval`: al aprobarse, ProductMaker lo ejecuta una vez. */
|
|
19116
|
+
operation: AgentPendingOperationSchema.optional()
|
|
19078
19117
|
}).strict();
|
|
19079
19118
|
var SaveAgentPendingResolveSchema = z78.object({
|
|
19080
19119
|
type: z78.literal("pending_resolve"),
|
|
@@ -19216,6 +19255,8 @@ var AgentPendingItemSchema = z78.object({
|
|
|
19216
19255
|
...AGENT_PENDING_RESOLUTIONS
|
|
19217
19256
|
]),
|
|
19218
19257
|
resolution: z78.string().nullable(),
|
|
19258
|
+
operation: AgentPendingOperationSchema.nullable(),
|
|
19259
|
+
execution: AgentPendingExecutionSchema.nullable(),
|
|
19219
19260
|
createdAt: z78.string(),
|
|
19220
19261
|
resolvedAt: z78.string().nullable()
|
|
19221
19262
|
});
|
|
@@ -26395,13 +26436,16 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
26395
26436
|
], SHARED_CHANNEL_EXPOSURE),
|
|
26396
26437
|
defineCapability(
|
|
26397
26438
|
"save_agent_memory",
|
|
26398
|
-
"
|
|
26399
|
-
// La memoria es el cuaderno del propio agente
|
|
26400
|
-
//
|
|
26439
|
+
"6d4a660cfe9018cdd4392dbaa73a3490e562fa2b7040b10ec70f9044637294a7",
|
|
26440
|
+
// La memoria es el cuaderno del propio agente y no cobra créditos. Aprobar
|
|
26441
|
+
// un pendiente que trae `operation` sí cambia la campaña o el conjunto en
|
|
26442
|
+
// Meta: esa aprobación ES la confirmación del dueño (el pendiente muestra
|
|
26443
|
+
// el cambio exacto), así que la herramienta no pide otra.
|
|
26401
26444
|
"none",
|
|
26402
26445
|
"business",
|
|
26403
26446
|
[
|
|
26404
|
-
"state_change"
|
|
26447
|
+
"state_change",
|
|
26448
|
+
"external_mutation"
|
|
26405
26449
|
],
|
|
26406
26450
|
[
|
|
26407
26451
|
slot("memory", true, [
|
|
@@ -32296,7 +32340,7 @@ var ApiClient = class {
|
|
|
32296
32340
|
};
|
|
32297
32341
|
|
|
32298
32342
|
// src/index.ts
|
|
32299
|
-
var MCP_VERSION = "12.
|
|
32343
|
+
var MCP_VERSION = "12.13.0";
|
|
32300
32344
|
|
|
32301
32345
|
// src/meta-upload-app.ts
|
|
32302
32346
|
import { readFileSync } from "fs";
|
|
@@ -33693,6 +33737,7 @@ var McpErrorCode = {
|
|
|
33693
33737
|
AGENT_EXPERIMENT_ALREADY_CLOSED: "AGENT_EXPERIMENT_ALREADY_CLOSED",
|
|
33694
33738
|
AGENT_PENDING_NOT_FOUND: "AGENT_PENDING_NOT_FOUND",
|
|
33695
33739
|
AGENT_PENDING_ALREADY_RESOLVED: "AGENT_PENDING_ALREADY_RESOLVED",
|
|
33740
|
+
AGENT_OPERATION_NEEDS_APPROVAL: "AGENT_OPERATION_NEEDS_APPROVAL",
|
|
33696
33741
|
AGENT_COUNTRY_REQUIRED: "AGENT_COUNTRY_REQUIRED",
|
|
33697
33742
|
AGENT_RUN_NO_SLOT: "AGENT_RUN_NO_SLOT",
|
|
33698
33743
|
AGENT_RUN_ALREADY_CLAIMED: "AGENT_RUN_ALREADY_CLAIMED",
|
|
@@ -33941,6 +33986,7 @@ var CODE_MESSAGES = {
|
|
|
33941
33986
|
AGENT_EXPERIMENT_ALREADY_CLOSED: "That experiment is already closed and is never reopened. Open a new experiment if you are testing again.",
|
|
33942
33987
|
AGENT_PENDING_NOT_FOUND: "No pending item with that id in this account's agent memory. Read the brief for the open ones.",
|
|
33943
33988
|
AGENT_PENDING_ALREADY_RESOLVED: "That pending item was already resolved. Add a new one if the decision changed.",
|
|
33989
|
+
AGENT_OPERATION_NEEDS_APPROVAL: 'Only a pending item of kind "approval" carries an operation (it runs in Meta when the owner approves). Send it as an approval, or drop the operation.',
|
|
33944
33990
|
AGENT_COUNTRY_REQUIRED: `This account has no country or time zone yet. Save the seller's country (or time zone) with save_agent_memory type "settings", then try again.`,
|
|
33945
33991
|
AGENT_RUN_NO_SLOT: "No autopilot turn is open now in the agent's time zone. Do not run a phase; turns start at 9, 12, 15, 18 and 21.",
|
|
33946
33992
|
AGENT_RUN_ALREADY_CLAIMED: "This autopilot turn was already claimed. Do not run this phase again; `run` shows who claimed it.",
|
|
@@ -33997,6 +34043,7 @@ var AGENT_MEMORY_CODES = [
|
|
|
33997
34043
|
McpErrorCode.AGENT_EXPERIMENT_ALREADY_CLOSED,
|
|
33998
34044
|
McpErrorCode.AGENT_PENDING_NOT_FOUND,
|
|
33999
34045
|
McpErrorCode.AGENT_PENDING_ALREADY_RESOLVED,
|
|
34046
|
+
McpErrorCode.AGENT_OPERATION_NEEDS_APPROVAL,
|
|
34000
34047
|
McpErrorCode.AGENT_COUNTRY_REQUIRED,
|
|
34001
34048
|
McpErrorCode.AGENT_RUN_NO_SLOT,
|
|
34002
34049
|
McpErrorCode.AGENT_RUN_ALREADY_CLAIMED,
|
|
@@ -42457,7 +42504,7 @@ function registerAgentMemoryTools(server, api) {
|
|
|
42457
42504
|
}
|
|
42458
42505
|
});
|
|
42459
42506
|
server.registerTool("save_agent_memory", {
|
|
42460
|
-
description: saveGuidance.summary + ' Un solo punto de escritura; `memory.type` dice qu\xE9 se guarda: "product" crea o actualiza la ficha por `code` (la primera vez exige `name`; solo cambia los campos enviados; `verdict: ""` lo borra; productControlId/projectId deben ser de esta cuenta), "experiment_open" abre un experimento con hip\xF3tesis y montaje, "experiment_close" lo cierra UNA vez con outcome y conclusi\xF3n (cerrado no se reabre: 409, abre otro), "playbook" guarda una versi\xF3n NUEVA completa del playbook (no un parche; las anteriores quedan en el historial), "pending_add" deja una aprobaci\xF3n o seguimiento abierto, "pending_resolve" lo resuelve UNA vez (409 si ya estaba resuelto), "note" escribe en la bit\xE1cora, "settings" guarda la configuraci\xF3n del agente (solo los campos enviados; `null` borra un valor; pa\xEDs, moneda, presupuesto y topes salen del contexto o de lo que diga el vendedor, nunca de un n\xFAmero por defecto; prender `autopilot` exige pa\xEDs o zona: 400 AGENT_COUNTRY_REQUIRED) y "spend" lleva el gasto del d\xEDa: `mode: "check"` ANTES de cada gasto (cr\xE9ditos cotizados o 1 conjunto nuevo) dice si cabe (`fits`) en el tope del vendedor, sin escribir (sin tope, siempre cabe); si no cabe, pide OK al vendedor. `mode: "record"` DESPU\xC9S registra el costo real con una `ref` por cobro (`<taskId>:<tool>`, runId o adSetId): repetirlo con el mismo monto no suma dos veces y otro monto con la misma ref es 409 AGENT_SPEND_REF_CONFLICT. "run_claim" reclama el turno vigente del piloto autom\xE1tico ANTES de correr una fase programada (turnos a las 9, 12, 15, 18 y 21 en la zona del agente; devuelve `phase`: launch, review, evening o weekly): 409 AGENT_RUN_ALREADY_CLAIMED si ya lo corri\xF3 otro (no lo corras), 409 AGENT_RUN_NO_SLOT fuera de horario, 400 AGENT_COUNTRY_REQUIRED si a\xFAn no hay pa\xEDs ni zona (guarda primero "settings" con el pa\xEDs o la zona del vendedor y reclama otra vez). "run_complete" cierra ese turno UNA vez con `status` done o failed y el reporte corto en `summary`. `productCode` debe existir (404 AGENT_PRODUCT_NOT_FOUND: guarda primero el producto). Para reintentar sin duplicar, manda el mismo `requestId` (UUID): la respuesta trae `replayed: true`. Nunca guardes datos personales de compradores, contrase\xF1as ni llaves.',
|
|
42507
|
+
description: saveGuidance.summary + ' Un solo punto de escritura; `memory.type` dice qu\xE9 se guarda: "product" crea o actualiza la ficha por `code` (la primera vez exige `name`; solo cambia los campos enviados; `verdict: ""` lo borra; productControlId/projectId deben ser de esta cuenta), "experiment_open" abre un experimento con hip\xF3tesis y montaje, "experiment_close" lo cierra UNA vez con outcome y conclusi\xF3n (cerrado no se reabre: 409, abre otro), "playbook" guarda una versi\xF3n NUEVA completa del playbook (no un parche; las anteriores quedan en el historial), "pending_add" deja una aprobaci\xF3n o seguimiento abierto (una aprobaci\xF3n de activar, pausar o cambiar el presupuesto diario de una campa\xF1a o un conjunto lleva `operation` con el id de Meta y, para presupuesto, monto y moneda de la cuenta m\xE1s `expectedAmount` con lo que ten\xEDa; 400 AGENT_OPERATION_NEEDS_APPROVAL en un seguimiento), "pending_resolve" lo resuelve UNA vez (409 si ya estaba resuelto; aprobar uno con `operation` lo ejecuta ProductMaker en Meta en ese momento y `execution` trae el resultado: applied, skipped si ya estaba as\xED o alguien lo cambi\xF3, o failed; no lo repitas t\xFA), "note" escribe en la bit\xE1cora, "settings" guarda la configuraci\xF3n del agente (solo los campos enviados; `null` borra un valor; pa\xEDs, moneda, presupuesto y topes salen del contexto o de lo que diga el vendedor, nunca de un n\xFAmero por defecto; prender `autopilot` exige pa\xEDs o zona: 400 AGENT_COUNTRY_REQUIRED) y "spend" lleva el gasto del d\xEDa: `mode: "check"` ANTES de cada gasto (cr\xE9ditos cotizados o 1 conjunto nuevo) dice si cabe (`fits`) en el tope del vendedor, sin escribir (sin tope, siempre cabe); si no cabe, pide OK al vendedor. `mode: "record"` DESPU\xC9S registra el costo real con una `ref` por cobro (`<taskId>:<tool>`, runId o adSetId): repetirlo con el mismo monto no suma dos veces y otro monto con la misma ref es 409 AGENT_SPEND_REF_CONFLICT. "run_claim" reclama el turno vigente del piloto autom\xE1tico ANTES de correr una fase programada (turnos a las 9, 12, 15, 18 y 21 en la zona del agente; devuelve `phase`: launch, review, evening o weekly): 409 AGENT_RUN_ALREADY_CLAIMED si ya lo corri\xF3 otro (no lo corras), 409 AGENT_RUN_NO_SLOT fuera de horario, 400 AGENT_COUNTRY_REQUIRED si a\xFAn no hay pa\xEDs ni zona (guarda primero "settings" con el pa\xEDs o la zona del vendedor y reclama otra vez). "run_complete" cierra ese turno UNA vez con `status` done o failed y el reporte corto en `summary`. `productCode` debe existir (404 AGENT_PRODUCT_NOT_FOUND: guarda primero el producto). Para reintentar sin duplicar, manda el mismo `requestId` (UUID): la respuesta trae `replayed: true`. Nunca guardes datos personales de compradores, contrase\xF1as ni llaves.',
|
|
42461
42508
|
inputSchema: SaveInput.shape,
|
|
42462
42509
|
annotations: OVERWRITES_INTERNAL
|
|
42463
42510
|
}, async (input) => {
|
package/dist/stdio.js
CHANGED
|
@@ -18840,6 +18840,43 @@ var SaveAgentPlaybookSchema = z78.object({
|
|
|
18840
18840
|
requestId: RequestIdSchema.optional(),
|
|
18841
18841
|
body: z78.string().trim().min(1).max(AGENT_MEMORY_LIMITS.playbookChars)
|
|
18842
18842
|
}).strict();
|
|
18843
|
+
var AGENT_PENDING_OPERATION_TARGETS = [
|
|
18844
|
+
"campaign",
|
|
18845
|
+
"adset"
|
|
18846
|
+
];
|
|
18847
|
+
var MetaObjectIdSchema = z78.string().trim().regex(/^\d{1,30}$/u);
|
|
18848
|
+
var AgentPendingOperationSchema = z78.discriminatedUnion("type", [
|
|
18849
|
+
z78.object({
|
|
18850
|
+
type: z78.literal("meta_set_status"),
|
|
18851
|
+
target: z78.enum(AGENT_PENDING_OPERATION_TARGETS),
|
|
18852
|
+
objectId: MetaObjectIdSchema,
|
|
18853
|
+
status: z78.enum([
|
|
18854
|
+
"ACTIVE",
|
|
18855
|
+
"PAUSED"
|
|
18856
|
+
])
|
|
18857
|
+
}).strict(),
|
|
18858
|
+
z78.object({
|
|
18859
|
+
type: z78.literal("meta_set_daily_budget"),
|
|
18860
|
+
target: z78.enum(AGENT_PENDING_OPERATION_TARGETS),
|
|
18861
|
+
objectId: MetaObjectIdSchema,
|
|
18862
|
+
/** En unidades de la moneda (COP 80000, USD 25.5), no en las de Meta. */
|
|
18863
|
+
amount: z78.number().positive().max(1e9),
|
|
18864
|
+
currency: z78.string().trim().length(3).toUpperCase(),
|
|
18865
|
+
/** Lo que tenía al proponerlo (obligatorio): si ya no coincide, no se pisa. */
|
|
18866
|
+
expectedAmount: z78.number().positive().max(1e9)
|
|
18867
|
+
}).strict()
|
|
18868
|
+
]);
|
|
18869
|
+
var AGENT_PENDING_EXECUTION_OUTCOMES = [
|
|
18870
|
+
"applied",
|
|
18871
|
+
"skipped",
|
|
18872
|
+
"failed"
|
|
18873
|
+
];
|
|
18874
|
+
var AgentPendingExecutionSchema = z78.object({
|
|
18875
|
+
outcome: z78.enum(AGENT_PENDING_EXECUTION_OUTCOMES),
|
|
18876
|
+
/** Para el dueño, en palabras simples. */
|
|
18877
|
+
message: z78.string(),
|
|
18878
|
+
at: z78.string()
|
|
18879
|
+
});
|
|
18843
18880
|
var SaveAgentPendingAddSchema = z78.object({
|
|
18844
18881
|
type: z78.literal("pending_add"),
|
|
18845
18882
|
requestId: RequestIdSchema.optional(),
|
|
@@ -18849,7 +18886,9 @@ var SaveAgentPendingAddSchema = z78.object({
|
|
|
18849
18886
|
action: z78.string().trim().min(1).max(AGENT_MEMORY_LIMITS.shortTextChars),
|
|
18850
18887
|
dueAt: z78.string().datetime({
|
|
18851
18888
|
offset: true
|
|
18852
|
-
}).optional()
|
|
18889
|
+
}).optional(),
|
|
18890
|
+
/** Solo en `approval`: al aprobarse, ProductMaker lo ejecuta una vez. */
|
|
18891
|
+
operation: AgentPendingOperationSchema.optional()
|
|
18853
18892
|
}).strict();
|
|
18854
18893
|
var SaveAgentPendingResolveSchema = z78.object({
|
|
18855
18894
|
type: z78.literal("pending_resolve"),
|
|
@@ -18991,6 +19030,8 @@ var AgentPendingItemSchema = z78.object({
|
|
|
18991
19030
|
...AGENT_PENDING_RESOLUTIONS
|
|
18992
19031
|
]),
|
|
18993
19032
|
resolution: z78.string().nullable(),
|
|
19033
|
+
operation: AgentPendingOperationSchema.nullable(),
|
|
19034
|
+
execution: AgentPendingExecutionSchema.nullable(),
|
|
18994
19035
|
createdAt: z78.string(),
|
|
18995
19036
|
resolvedAt: z78.string().nullable()
|
|
18996
19037
|
});
|
|
@@ -26170,13 +26211,16 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
26170
26211
|
], SHARED_CHANNEL_EXPOSURE),
|
|
26171
26212
|
defineCapability(
|
|
26172
26213
|
"save_agent_memory",
|
|
26173
|
-
"
|
|
26174
|
-
// La memoria es el cuaderno del propio agente
|
|
26175
|
-
//
|
|
26214
|
+
"6d4a660cfe9018cdd4392dbaa73a3490e562fa2b7040b10ec70f9044637294a7",
|
|
26215
|
+
// La memoria es el cuaderno del propio agente y no cobra créditos. Aprobar
|
|
26216
|
+
// un pendiente que trae `operation` sí cambia la campaña o el conjunto en
|
|
26217
|
+
// Meta: esa aprobación ES la confirmación del dueño (el pendiente muestra
|
|
26218
|
+
// el cambio exacto), así que la herramienta no pide otra.
|
|
26176
26219
|
"none",
|
|
26177
26220
|
"business",
|
|
26178
26221
|
[
|
|
26179
|
-
"state_change"
|
|
26222
|
+
"state_change",
|
|
26223
|
+
"external_mutation"
|
|
26180
26224
|
],
|
|
26181
26225
|
[
|
|
26182
26226
|
slot("memory", true, [
|
|
@@ -30623,7 +30667,7 @@ var ApiClient = class {
|
|
|
30623
30667
|
};
|
|
30624
30668
|
|
|
30625
30669
|
// src/index.ts
|
|
30626
|
-
var MCP_VERSION = "12.
|
|
30670
|
+
var MCP_VERSION = "12.13.0";
|
|
30627
30671
|
|
|
30628
30672
|
// src/meta-upload-app.ts
|
|
30629
30673
|
import { readFileSync } from "fs";
|
|
@@ -32024,6 +32068,7 @@ var McpErrorCode = {
|
|
|
32024
32068
|
AGENT_EXPERIMENT_ALREADY_CLOSED: "AGENT_EXPERIMENT_ALREADY_CLOSED",
|
|
32025
32069
|
AGENT_PENDING_NOT_FOUND: "AGENT_PENDING_NOT_FOUND",
|
|
32026
32070
|
AGENT_PENDING_ALREADY_RESOLVED: "AGENT_PENDING_ALREADY_RESOLVED",
|
|
32071
|
+
AGENT_OPERATION_NEEDS_APPROVAL: "AGENT_OPERATION_NEEDS_APPROVAL",
|
|
32027
32072
|
AGENT_COUNTRY_REQUIRED: "AGENT_COUNTRY_REQUIRED",
|
|
32028
32073
|
AGENT_RUN_NO_SLOT: "AGENT_RUN_NO_SLOT",
|
|
32029
32074
|
AGENT_RUN_ALREADY_CLAIMED: "AGENT_RUN_ALREADY_CLAIMED",
|
|
@@ -32272,6 +32317,7 @@ var CODE_MESSAGES = {
|
|
|
32272
32317
|
AGENT_EXPERIMENT_ALREADY_CLOSED: "That experiment is already closed and is never reopened. Open a new experiment if you are testing again.",
|
|
32273
32318
|
AGENT_PENDING_NOT_FOUND: "No pending item with that id in this account's agent memory. Read the brief for the open ones.",
|
|
32274
32319
|
AGENT_PENDING_ALREADY_RESOLVED: "That pending item was already resolved. Add a new one if the decision changed.",
|
|
32320
|
+
AGENT_OPERATION_NEEDS_APPROVAL: 'Only a pending item of kind "approval" carries an operation (it runs in Meta when the owner approves). Send it as an approval, or drop the operation.',
|
|
32275
32321
|
AGENT_COUNTRY_REQUIRED: `This account has no country or time zone yet. Save the seller's country (or time zone) with save_agent_memory type "settings", then try again.`,
|
|
32276
32322
|
AGENT_RUN_NO_SLOT: "No autopilot turn is open now in the agent's time zone. Do not run a phase; turns start at 9, 12, 15, 18 and 21.",
|
|
32277
32323
|
AGENT_RUN_ALREADY_CLAIMED: "This autopilot turn was already claimed. Do not run this phase again; `run` shows who claimed it.",
|
|
@@ -32328,6 +32374,7 @@ var AGENT_MEMORY_CODES = [
|
|
|
32328
32374
|
McpErrorCode.AGENT_EXPERIMENT_ALREADY_CLOSED,
|
|
32329
32375
|
McpErrorCode.AGENT_PENDING_NOT_FOUND,
|
|
32330
32376
|
McpErrorCode.AGENT_PENDING_ALREADY_RESOLVED,
|
|
32377
|
+
McpErrorCode.AGENT_OPERATION_NEEDS_APPROVAL,
|
|
32331
32378
|
McpErrorCode.AGENT_COUNTRY_REQUIRED,
|
|
32332
32379
|
McpErrorCode.AGENT_RUN_NO_SLOT,
|
|
32333
32380
|
McpErrorCode.AGENT_RUN_ALREADY_CLAIMED,
|
|
@@ -40942,7 +40989,7 @@ function registerAgentMemoryTools(server, api) {
|
|
|
40942
40989
|
}
|
|
40943
40990
|
});
|
|
40944
40991
|
server.registerTool("save_agent_memory", {
|
|
40945
|
-
description: saveGuidance.summary + ' Un solo punto de escritura; `memory.type` dice qu\xE9 se guarda: "product" crea o actualiza la ficha por `code` (la primera vez exige `name`; solo cambia los campos enviados; `verdict: ""` lo borra; productControlId/projectId deben ser de esta cuenta), "experiment_open" abre un experimento con hip\xF3tesis y montaje, "experiment_close" lo cierra UNA vez con outcome y conclusi\xF3n (cerrado no se reabre: 409, abre otro), "playbook" guarda una versi\xF3n NUEVA completa del playbook (no un parche; las anteriores quedan en el historial), "pending_add" deja una aprobaci\xF3n o seguimiento abierto, "pending_resolve" lo resuelve UNA vez (409 si ya estaba resuelto), "note" escribe en la bit\xE1cora, "settings" guarda la configuraci\xF3n del agente (solo los campos enviados; `null` borra un valor; pa\xEDs, moneda, presupuesto y topes salen del contexto o de lo que diga el vendedor, nunca de un n\xFAmero por defecto; prender `autopilot` exige pa\xEDs o zona: 400 AGENT_COUNTRY_REQUIRED) y "spend" lleva el gasto del d\xEDa: `mode: "check"` ANTES de cada gasto (cr\xE9ditos cotizados o 1 conjunto nuevo) dice si cabe (`fits`) en el tope del vendedor, sin escribir (sin tope, siempre cabe); si no cabe, pide OK al vendedor. `mode: "record"` DESPU\xC9S registra el costo real con una `ref` por cobro (`<taskId>:<tool>`, runId o adSetId): repetirlo con el mismo monto no suma dos veces y otro monto con la misma ref es 409 AGENT_SPEND_REF_CONFLICT. "run_claim" reclama el turno vigente del piloto autom\xE1tico ANTES de correr una fase programada (turnos a las 9, 12, 15, 18 y 21 en la zona del agente; devuelve `phase`: launch, review, evening o weekly): 409 AGENT_RUN_ALREADY_CLAIMED si ya lo corri\xF3 otro (no lo corras), 409 AGENT_RUN_NO_SLOT fuera de horario, 400 AGENT_COUNTRY_REQUIRED si a\xFAn no hay pa\xEDs ni zona (guarda primero "settings" con el pa\xEDs o la zona del vendedor y reclama otra vez). "run_complete" cierra ese turno UNA vez con `status` done o failed y el reporte corto en `summary`. `productCode` debe existir (404 AGENT_PRODUCT_NOT_FOUND: guarda primero el producto). Para reintentar sin duplicar, manda el mismo `requestId` (UUID): la respuesta trae `replayed: true`. Nunca guardes datos personales de compradores, contrase\xF1as ni llaves.',
|
|
40992
|
+
description: saveGuidance.summary + ' Un solo punto de escritura; `memory.type` dice qu\xE9 se guarda: "product" crea o actualiza la ficha por `code` (la primera vez exige `name`; solo cambia los campos enviados; `verdict: ""` lo borra; productControlId/projectId deben ser de esta cuenta), "experiment_open" abre un experimento con hip\xF3tesis y montaje, "experiment_close" lo cierra UNA vez con outcome y conclusi\xF3n (cerrado no se reabre: 409, abre otro), "playbook" guarda una versi\xF3n NUEVA completa del playbook (no un parche; las anteriores quedan en el historial), "pending_add" deja una aprobaci\xF3n o seguimiento abierto (una aprobaci\xF3n de activar, pausar o cambiar el presupuesto diario de una campa\xF1a o un conjunto lleva `operation` con el id de Meta y, para presupuesto, monto y moneda de la cuenta m\xE1s `expectedAmount` con lo que ten\xEDa; 400 AGENT_OPERATION_NEEDS_APPROVAL en un seguimiento), "pending_resolve" lo resuelve UNA vez (409 si ya estaba resuelto; aprobar uno con `operation` lo ejecuta ProductMaker en Meta en ese momento y `execution` trae el resultado: applied, skipped si ya estaba as\xED o alguien lo cambi\xF3, o failed; no lo repitas t\xFA), "note" escribe en la bit\xE1cora, "settings" guarda la configuraci\xF3n del agente (solo los campos enviados; `null` borra un valor; pa\xEDs, moneda, presupuesto y topes salen del contexto o de lo que diga el vendedor, nunca de un n\xFAmero por defecto; prender `autopilot` exige pa\xEDs o zona: 400 AGENT_COUNTRY_REQUIRED) y "spend" lleva el gasto del d\xEDa: `mode: "check"` ANTES de cada gasto (cr\xE9ditos cotizados o 1 conjunto nuevo) dice si cabe (`fits`) en el tope del vendedor, sin escribir (sin tope, siempre cabe); si no cabe, pide OK al vendedor. `mode: "record"` DESPU\xC9S registra el costo real con una `ref` por cobro (`<taskId>:<tool>`, runId o adSetId): repetirlo con el mismo monto no suma dos veces y otro monto con la misma ref es 409 AGENT_SPEND_REF_CONFLICT. "run_claim" reclama el turno vigente del piloto autom\xE1tico ANTES de correr una fase programada (turnos a las 9, 12, 15, 18 y 21 en la zona del agente; devuelve `phase`: launch, review, evening o weekly): 409 AGENT_RUN_ALREADY_CLAIMED si ya lo corri\xF3 otro (no lo corras), 409 AGENT_RUN_NO_SLOT fuera de horario, 400 AGENT_COUNTRY_REQUIRED si a\xFAn no hay pa\xEDs ni zona (guarda primero "settings" con el pa\xEDs o la zona del vendedor y reclama otra vez). "run_complete" cierra ese turno UNA vez con `status` done o failed y el reporte corto en `summary`. `productCode` debe existir (404 AGENT_PRODUCT_NOT_FOUND: guarda primero el producto). Para reintentar sin duplicar, manda el mismo `requestId` (UUID): la respuesta trae `replayed: true`. Nunca guardes datos personales de compradores, contrase\xF1as ni llaves.',
|
|
40946
40993
|
inputSchema: SaveInput.shape,
|
|
40947
40994
|
annotations: OVERWRITES_INTERNAL
|
|
40948
40995
|
}, async (input) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@productmaker/mcp",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.13.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"description": "ProductMaker MCP server — cost products, generate landing pages, UGC videos, and ad creatives, and publish to Shopify, Meta Ads, and TikTok Ads.",
|
|
@@ -67,8 +67,8 @@
|
|
|
67
67
|
"typescript": "^7.0.2",
|
|
68
68
|
"vitest": "5.0.3",
|
|
69
69
|
"@packages/product-economics": "0.1.0",
|
|
70
|
-
"@packages/
|
|
71
|
-
"@packages/
|
|
70
|
+
"@packages/utils": "0.1.0",
|
|
71
|
+
"@packages/types": "0.1.0"
|
|
72
72
|
},
|
|
73
73
|
"publishConfig": {
|
|
74
74
|
"access": "public"
|