{
  "packages": [
    {
      "id": "ask-the-page",
      "name": "Ask the page",
      "description": "Answers questions about this page with a language model, from the plugins it is made of.",
      "version": "1.0.0",
      "href": "/std/ask-the-page.js",
      "permissions": [
        "ui",
        "llm",
        "plugins:read"
      ],
      "provides": [],
      "services": [
        "llm"
      ],
      "std": true,
      "kind": "ui",
      "group": "Building plugins",
      "places": [
        "append main"
      ],
      "apps": [
        "home"
      ],
      "needsOneOf": {
        "llm": [
          "llm-anthropic",
          "llm-gemini",
          "llm-openai",
          "llm-openai-compatible"
        ]
      }
    },
    {
      "id": "board",
      "name": "Board",
      "description": "Questions from the app's agents, waiting for your answer, and what they did lately.",
      "version": "1.0.0",
      "href": "/std/board.js",
      "permissions": [
        "ui",
        "bus:board",
        "hook:listen:bus:asked",
        "hook:listen:bus:answered",
        "hook:listen:agent:*"
      ],
      "provides": [],
      "services": [
        "bus"
      ],
      "std": true,
      "kind": "ui",
      "group": "Agents",
      "places": [
        "append main"
      ],
      "apps": [
        "demos/assistant",
        "demos/librarian",
        "demos/markdown-editor",
        "demos/security",
        "site/new"
      ]
    },
    {
      "id": "llm-anthropic",
      "name": "Claude (Anthropic)",
      "description": "A language model for this app: Claude, from Anthropic. Uses your own Anthropic API key, which goes only to Anthropic.",
      "version": "1.1.0",
      "href": "/std/llm/anthropic.js",
      "permissions": [
        "provide:llm",
        "network:api.anthropic.com",
        "secret:anthropic"
      ],
      "provides": [],
      "services": [
        "llm"
      ],
      "std": true,
      "kind": "service",
      "group": "Language models",
      "places": [],
      "apps": [
        "demos/assistant",
        "demos/librarian",
        "demos/markdown-editor",
        "demos/security",
        "home",
        "site/new"
      ]
    },
    {
      "id": "clock",
      "name": "Clock",
      "description": "Provides the clock service: the time now in any time zone.",
      "version": "1.0.0",
      "href": "/packages/clock/clock.js",
      "permissions": [
        "provide:clock"
      ],
      "provides": [
        "clock"
      ],
      "services": [],
      "kind": "service",
      "group": "Examples",
      "places": [],
      "apps": []
    },
    {
      "id": "debug-console",
      "name": "Debug console",
      "description": "A bug button that shows errors and the trace, ready to copy into a bug report.",
      "version": "1.0.0",
      "href": "/std/debug-console.js",
      "permissions": [
        "ui",
        "debug:read"
      ],
      "provides": [],
      "services": [
        "debug"
      ],
      "std": true,
      "kind": "ui",
      "group": "Looking inside",
      "places": [
        "append body"
      ],
      "apps": [
        "demos/calendar",
        "demos/contacts",
        "demos/household",
        "demos/reading-list",
        "demos/recipes",
        "demos/spending",
        "home",
        "site/new"
      ]
    },
    {
      "id": "llm-gemini",
      "name": "Gemini (Google)",
      "description": "A language model for this app: Gemini, from Google. Uses your own Gemini API key, which goes only to Google.",
      "version": "1.1.0",
      "href": "/std/llm/gemini.js",
      "permissions": [
        "provide:llm",
        "network:generativelanguage.googleapis.com",
        "secret:gemini"
      ],
      "provides": [],
      "services": [
        "llm"
      ],
      "std": true,
      "kind": "service",
      "group": "Language models",
      "places": [],
      "apps": [
        "home",
        "site/new"
      ]
    },
    {
      "id": "hook-tracer",
      "name": "Hook tracer",
      "description": "Shows each hook an action runs, in order, and what every plugin listening said.",
      "version": "1.0.0",
      "href": "/std/hook-tracer.js",
      "permissions": [
        "ui",
        "plugins:read",
        "debug:read"
      ],
      "provides": [],
      "services": [],
      "std": true,
      "kind": "ui",
      "group": "Looking inside",
      "places": [
        "append main"
      ],
      "apps": [
        "home"
      ]
    },
    {
      "id": "import-export",
      "name": "Import and export",
      "description": "Buttons to save each of the app's collections to a CSV or JSON file, and to import a file's rows into one.",
      "version": "1.0.0",
      "href": "/std/import-export.js",
      "permissions": [
        "ui",
        "transfer"
      ],
      "provides": [],
      "services": [
        "transfer"
      ],
      "std": true,
      "kind": "ui",
      "group": "Your data",
      "places": [
        "append main"
      ],
      "apps": [
        "demos/spending"
      ]
    },
    {
      "id": "llm-openai-compatible",
      "name": "Ollama",
      "description": "A language model for this app that runs on your own computer, with Ollama. No key needed.",
      "version": "1.0.0",
      "href": "/std/llm/openai-compatible.js",
      "permissions": [
        "provide:llm",
        "network:localhost:11434"
      ],
      "provides": [],
      "services": [
        "llm"
      ],
      "std": true,
      "kind": "service",
      "group": "Language models",
      "places": [],
      "apps": []
    },
    {
      "id": "llm-openai",
      "name": "OpenAI",
      "description": "A language model for this app: OpenAI's models. Uses your own OpenAI API key, which goes only to OpenAI.",
      "version": "1.1.0",
      "href": "/std/llm/openai.js",
      "permissions": [
        "provide:llm",
        "network:api.openai.com",
        "secret:openai"
      ],
      "provides": [],
      "services": [
        "llm"
      ],
      "std": true,
      "kind": "service",
      "group": "Language models",
      "places": [],
      "apps": [
        "home",
        "site/new"
      ]
    },
    {
      "id": "plugin-editor",
      "name": "Plugin editor",
      "description": "Write a plugin, or change a copy of one on the page, and see what it asks for before it runs.",
      "version": "1.0.0",
      "href": "/std/plugin-editor.js",
      "permissions": [
        "ui",
        "plugins:read",
        "plugins:author",
        "debug:read"
      ],
      "provides": [],
      "services": [],
      "std": true,
      "kind": "ui",
      "group": "Building plugins",
      "places": [
        "append main"
      ],
      "apps": [
        "home"
      ]
    },
    {
      "id": "plugin-maker",
      "name": "Plugin maker",
      "description": "Describe a plugin you want for this page: a language model writes it, and you accept its code before it runs.",
      "version": "1.0.0",
      "href": "/std/plugin-maker.js",
      "permissions": [
        "ui",
        "llm",
        "plugins:author"
      ],
      "provides": [],
      "services": [
        "llm"
      ],
      "std": true,
      "kind": "ui",
      "group": "Building plugins",
      "places": [
        "append main"
      ],
      "apps": [],
      "needsOneOf": {
        "llm": [
          "llm-anthropic",
          "llm-gemini",
          "llm-openai",
          "llm-openai-compatible"
        ]
      }
    },
    {
      "id": "reset",
      "name": "Reset",
      "description": "Turns every plugin on the page back on.",
      "version": "1.0.0",
      "href": "/std/reset.js",
      "permissions": [
        "ui",
        "plugins:read",
        "plugins:manage"
      ],
      "provides": [],
      "services": [],
      "std": true,
      "kind": "ui",
      "group": "Turning plugins on and off",
      "places": [
        "append main"
      ],
      "apps": [
        "home"
      ]
    },
    {
      "id": "switchboard",
      "name": "Switchboard",
      "description": "A switch for each plugin on the page.",
      "version": "1.0.0",
      "href": "/std/switchboard.js",
      "permissions": [
        "ui",
        "plugins:read",
        "plugins:manage"
      ],
      "provides": [],
      "services": [],
      "std": true,
      "kind": "ui",
      "group": "Turning plugins on and off",
      "places": [
        "append main"
      ],
      "apps": [
        "home",
        "site/new"
      ]
    },
    {
      "id": "sync-status",
      "name": "Sync",
      "description": "In a space: whether this page reaches it, and the versions of records it kept when someone else changed them first.",
      "version": "1.0.0",
      "href": "/std/sync.js",
      "permissions": [
        "ui",
        "sync"
      ],
      "provides": [],
      "services": [
        "sync"
      ],
      "std": true,
      "kind": "ui",
      "group": "Your data",
      "places": [
        "append main"
      ],
      "apps": [
        "demos/feeds",
        "demos/household",
        "demos/reading-list",
        "demos/survey"
      ]
    },
    {
      "id": "undo",
      "name": "Undo",
      "description": "Undo and Redo buttons that take back the app's most recent change to its data, and put it back again.",
      "version": "1.0.0",
      "href": "/std/undo.js",
      "permissions": [
        "ui",
        "history"
      ],
      "provides": [],
      "services": [
        "history"
      ],
      "std": true,
      "kind": "ui",
      "group": "Your data",
      "places": [
        "append main"
      ],
      "apps": [
        "demos/spending"
      ]
    },
    {
      "id": "view-source",
      "name": "View source",
      "description": "Shows the code of every plugin on the page, and what each one may do.",
      "version": "1.0.0",
      "href": "/std/view-source.js",
      "permissions": [
        "ui",
        "plugins:read"
      ],
      "provides": [],
      "services": [],
      "std": true,
      "kind": "ui",
      "group": "Looking inside",
      "places": [
        "append main"
      ],
      "apps": [
        "home"
      ]
    },
    {
      "id": "world-clock",
      "name": "World clock",
      "description": "The time in London, New York and Tokyo, at the foot of the page.",
      "version": "1.0.0",
      "href": "/packages/world-clock/world-clock.js",
      "permissions": [
        "ui",
        "clock"
      ],
      "provides": [],
      "services": [
        "clock"
      ],
      "kind": "ui",
      "group": "Examples",
      "places": [
        "append main"
      ],
      "apps": []
    }
  ]
}
