TencentCloud/TencentDB-Agent-Memory · error · ParamRegistryError

Module '${mod.module}', param '${param.param_name}': param_v

Error message

Module '${mod.module}', param '${param.param_name}': param_value is required

What it means

Every param must have an actual value: buildRegistry throws this when param.param_value is undefined or null. The registry exists to hold concrete parameter values, so a param without one is invalid and blocks loading.

Source

Thrown at MemoryCore/src/metadata/config/param-registry.ts:123

      if (!param.param_name || typeof param.param_name !== "string") {
        throw new ParamRegistryError(
          `Module '${mod.module}': each param must have a 'param_name' string`,
        );
      }
      if (!PARAM_NAME_RE.test(param.param_name)) {
        throw new ParamRegistryError(
          `Module '${mod.module}': invalid param_name '${param.param_name}': must match ${PARAM_NAME_RE}`,
        );
      }
      if (seenParams.has(param.param_name)) {
        throw new ParamRegistryError(
          `Module '${mod.module}': duplicate param_name '${param.param_name}'`,
        );
      }
      seenParams.add(param.param_name);

      if (param.param_value === undefined || param.param_value === null) {
        throw new ParamRegistryError(
          `Module '${mod.module}', param '${param.param_name}': param_value is required`,
        );
      }
      if (!param.description) {
        throw new ParamRegistryError(
          `Module '${mod.module}', param '${param.param_name}': description is required`,
        );
      }
      if (
        !Array.isArray(param.allowed_scopes) ||
        param.allowed_scopes.length === 0
      ) {
        throw new ParamRegistryError(
          `Module '${mod.module}', param '${param.param_name}': allowed_scopes must be non-empty array`,
        );
      }
      for (const scope of param.allowed_scopes) {
        if (scope !== "global" && scope !== "user") {

View on GitHub (pinned to 3efcd317b8)

Solutions

  1. Set a concrete param_value appropriate for the parameter's type
  2. Remove the param entry if it has no value yet
  3. Fix the generator/converter so it emits real values instead of null
  4. Pre-load validate that every param has param_value !== undefined && !== null

Example fix

// before
{ "param_name": "max_entries", "param_value": null, ... }
// after
{ "param_name": "max_entries", "param_value": 1000, ... }
Defensive patterns

Strategy: validation

Validate before calling

for (const m of data.modules) {
  for (const p of m.params ?? []) {
    if (p.param_value === undefined || p.param_value === null) {
      throw new Error(`${m.module}.${p.param_name} has no param_value`);
    }
  }
}

Try / catch

try {
  const registry = await loadParamRegistry();
} catch (e) {
  if (e instanceof ParamRegistryError && e.message.includes('param_value is required')) {
    console.error('Set a concrete value for the named param:', e.message);
  } else throw e;
}

Prevention

When it happens

Trigger: A param entry in data.modules[i].params has no param_value field, or it is explicitly null/undefined, when loadParamRegistry builds the registry.

Common situations: Templates left with "param_value": null pending a real value; scripts that emit the key but skip values; YAML/JSON converted where empty values become null.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of TencentCloud/TencentDB-Agent-Memory@3efcd317b8 (2026-09-01). Data as JSON: /api/errors/686299d622bcd1c2. Report an issue: GitHub.