Skip to content
This repository was archived by the owner on Jul 22, 2025. It is now read-only.

Conversation

@SamSaffron
Copy link
Member

@SamSaffron SamSaffron commented Jun 9, 2025

Introduces a persistent, user-scoped key-value storage system for
AI Artifacts, enabling them to be stateful and interactive. This
transforms artifacts from static content into mini-applications that can
save user input, preferences, and other data.

The core components of this feature are:

  1. Model and API:

    • A new AiArtifactKeyValue model and corresponding database table to
      store data associated with a user and an artifact.
    • A new ArtifactKeyValuesController provides a RESTful API for
      CRUD operations (index, set, destroy) on the key-value data.
    • Permissions are enforced: users can only modify their own data but
      can view public data from other users.
  2. Secure JavaScript Bridge:

    • A postMessage communication bridge is established between the
      sandboxed artifact iframe and the parent Discourse window.
    • A JavaScript API is exposed to the artifact as window.discourseArtifact
      with async methods: get(key), set(key, value, options),
      delete(key), and index(filter).
    • The parent window handles these requests, makes authenticated calls to the
      new controller, and returns the results to the iframe. This ensures
      security by keeping untrusted JS isolated.
  3. AI Tool Integration:

    • The create_artifact tool is updated with a requires_storage
      boolean parameter.
    • If an artifact requires storage, its metadata is flagged, and the
      system prompt for the code-generating AI is augmented with detailed
      documentation for the new storage API.
  4. Configuration:

    • Adds hidden site settings ai_artifact_kv_value_max_length and
      ai_artifact_max_keys_per_user_per_artifact for throttling.

This also includes a minor fix to use jsonb_set when updating
artifact metadata, ensuring other metadata fields are preserved.

@SamSaffron SamSaffron changed the title artifact storage FEATURE: persistent key-value storage for AI Artifacts Jun 9, 2025
@SamSaffron SamSaffron marked this pull request as ready for review June 9, 2025 06:22
@SamSaffron SamSaffron merged commit fdf0ff8 into main Jun 10, 2025
6 checks passed
@SamSaffron SamSaffron deleted the artifact-storage branch June 10, 2025 20:59
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Development

Successfully merging this pull request may close these issues.

5 participants