Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

[Bug] Compiler loses __proto__ keys in object variable defaults

Ouverte Adaptée aux débutants
#102 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
78/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
node.js, typescript
Domaine
backend

Piste de recherche

Commence par packages/compiler/src/ast-helpers.ts et examine extractDictExpression(), qui, selon l’issue, attribue les entrées du dictionnaire avec result[key] = value. Reproduis les cas signalés de __proto__ sous forme d’objet et de scalaire, et vérifie que le cas témoin constructor se comporte toujours comme prévu. Le travail est terminé lorsque la compilation conserve __proto__ comme propriété propre dans la sortie snake_case ; exécute la suite du compilateur pour vérifier l’absence de régressions.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Description

A quoted __proto__ dictionary key disappears from a mutable object default during compilation. With an object value, the compiler changes the default object's prototype instead of creating an own property. No parser, schema, lint, or compiler diagnostic is returned.

Steps to Reproduce

  1. Check out salesforce/agentscript at ace15eb2dc75564fd9e214385ac045c539056770 (current main).
  2. Parse the source below with @agentscript/parser, convert it with new Dialect().parse(mappingNode, AgentforceSchema), and run the Agentforce defaultRules() through LintEngine with agentforceSchemaContext.
  3. Pass the parsed value to compile() and inspect the payload entry in output.agent_version.state_variables, before any camelCase conversion.

Expected Behavior

The default has an own __proto__ property and serializes as:

{"__proto__":{"marker":"kept"},"normal":{"n":1}}

Actual Behavior

The default serializes as:

{"normal":{"n":1}}

Object.hasOwn(payload.default, '__proto__') is false, while Object.getPrototypeOf(payload.default).marker is "kept". A scalar value ("__proto__": "kept") is also lost. A "constructor": {"marker": "kept"} control retains its own key and value.

Environment

  • Node.js: 22.20.0
  • pnpm: 10.34.6
  • OS: macOS 27.0.1, arm64
  • Package: @agentscript/compiler, source checkout at the commit above
  • Parser: default JavaScript backend

Minimal Reproduction

config:
    agent_name: "TestBot"
    agent_type: "AgentforceServiceAgent"
access:
    default_agent_user: "[email protected]"
variables:
    payload: mutable object = {"__proto__": {"marker": "kept"}, "normal": {"n": 1}}
start_agent main:
    description: "Test"
    reasoning:
        instructions: ->
            | {[email protected]}

Additional Context

extractDictExpression() in packages/compiler/src/ast-helpers.ts assigns entries with result[key] = value on an ordinary object. For __proto__, that invokes the inherited setter. This is a different path from #88/#89: the loss is already present in the snake_case output of compile(), without calling snakeKeysToCamel. The dictionaries here are nonempty, so this also differs from #101's empty-dictionary loss.

Reproduced offline with assertions on object/scalar __proto__ values and the constructor control. The existing compiler suite passed (1,113 passed, 3 skipped), and the required TypeScript package builds passed. The standard dependency build was blocked by the missing tree-sitter CLI; no native-parser or full monorepo checks were run. No fix is included.

Langage dominant
TypeScript
Étoiles
272
Forks
55
Merge moyen
12 h 18 min
PR mergées (30 j)
5

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de salesforce/agentscript

Toutes les issues de salesforce/agentscript

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.