← VolcanoCONTENT HISTORY
WHAT CHANGED
Update to Volcano
Snapshot Oct 24, 2026 · 13:36 UTC · version 0.2.26
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Save Volcano and check future changes in Following.
Up to 10 plugins free · no card required.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Use for Volcano project logs, retained log search, log pagination, activity buckets, structured log filters, and server-side log readers using project access tokens.",
"included_files": [],
"name": "volcano-logs",
"skill_md_contents": "---\nname: volcano-logs\ndescription: Use for Volcano project logs, retained log search, log pagination, activity buckets, structured log filters, and server-side log readers using project access tokens.\n---\n# Volcano Logs Skill\n\n## Role and pairing\n\nUse this skill when application or operator code reads retained project logs or\nactivity counts through an SDK. Pair it with `volcano-sdk` and\n`volcano-platform`.\n\nCLI log commands for one deployed function belong to `volcano-functions` or\n`volcano-durable`. This skill covers the SDK project-log facade.\n\nUse the project's language:\n\n| Project signal | SDK behavior |\n|---|---|\n| `package.json`, `.ts`, `.js` | JavaScript/TypeScript result envelopes |\n| `pyproject.toml`, `requirements.txt`, `.py` | Python values and typed exceptions |\n| `Gemfile`, `.gemspec`, `.rb` | Ruby values and typed exceptions |\n\n## Credentials\n\nLogs require a platform token or project access token. A `read_only` project\naccess token is sufficient. Keep it in server code. End-user sessions, anon\nkeys, and service keys do not grant project log access.\n\n```ts\nimport { VolcanoClient } from '@volcano.dev/sdk';\n\nconst client = new VolcanoClient({\n anonKey: process.env.VOLCANO_ANON_KEY,\n apiUrl: process.env.VOLCANO_API_URL,\n accessToken: process.env.VOLCANO_PROJECT_ACCESS_TOKEN,\n});\n```\n\nPython uses `VolcanoClient(anon_key=..., access_token=...)`. Ruby uses\n`Volcano::Client.new(anon_key: ..., access_token: ...)`. Supply the same project\naccess token and API URL in each language.\n\n## Search retained logs\n\n### JavaScript and TypeScript\n\n```ts\nconst request = {\n resource: { type: 'function' as const },\n q: 'level:(warn OR error) body:checkout_failed',\n limit: 100,\n};\n\nconst { data: page, error } = await client.logs.search(projectId, request);\nif (error) throw error;\nif (!page) throw new Error('Log search returned no page');\nfor (const event of page.data) console.log(event.timestamp, event.body);\n```\n\n### Python\n\n```python\nrequest = {\n \"resource\": {\"type\": \"function\"},\n \"q\": \"level:(warn OR error) body:checkout_failed\",\n \"limit\": 100,\n}\npage = client.logs.search(project_id, request)\nfor event in page.data:\n print(event[\"timestamp\"], event[\"body\"])\n```\n\n### Ruby\n\n```ruby\nrequest = {\n resource: { type: \"function\" },\n q: \"level:(warn OR error) body:checkout_failed\",\n limit: 100\n}\npage = client.logs.search(project_id, request)\npage.data.each { |event| puts [event[\"timestamp\"], event[\"body\"]] }\n```\n\nPython and Ruby raise typed SDK exceptions on request or response failures. Use\n`resource.ids` to select resources. Use RFC3339 `start_time` and `end_time` for\na bounded range. Log bodies can be JSON values, not only strings.\n\n## Pagination\n\n```ts\nif (page.has_more && page.next_cursor) {\n const { data: next, error } = await client.logs.search(projectId, {\n ...request,\n cursor: page.next_cursor,\n });\n if (error) throw error;\n if (!next) throw new Error('Log search returned no page');\n}\n```\n\nKeep the resource selector, query, and time bounds unchanged when continuing a\nsearch. Treat the cursor as opaque.\n\n## Activity buckets\n\n```ts\nconst { data: activity, error } = await client.logs.activity(projectId, {\n resource: request.resource,\n q: request.q,\n bucket_count: 24,\n});\nif (error) throw error;\nif (!activity) throw new Error('Log activity returned no data');\nconsole.log(activity.total, activity.data);\n```\n\nActivity groups counts by level, region, and resource ID. Logs arrive\nasynchronously, so use bounded polling when a check waits for a new event.\n\n## Safety\n\n- Never put a project token in browser code.\n- Do not call auth sign-out to revoke a project token.\n- Do not change filters while reusing a cursor.\n- Bound polling and log reads.\n- Do not assume `body` is a string.\n\n## Verification\n\n- Search with a `read_only` project token.\n- Confirm the resource and query filters exclude unrelated events.\n- Continue one page with `next_cursor` when present.\n- Confirm activity bucket totals sum to the response total.\n"
}SHA-256 of public snapshot: a37ac56b46cff6153e42a254a6be63aa3ab5b5f002e54f74ba58db55fdf1bde1