{"_id":"@almanac-ai/agentlogs-node","name":"@almanac-ai/agentlogs-node","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@almanac-ai/agentlogs-node","version":"0.1.0","description":"Structured local logs your coding agent can read — Node/Express SDK with one trace across services.","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"engines":{"node":">=18"},"scripts":{"build":"tsc -p tsconfig.json","test":"tsx test/js.test.ts","prepublishOnly":"npm run build"},"dependencies":{"@almanac-ai/agentlogs-core":"0.1.0"},"keywords":["logging","tracing","debugging","express","agents","observability"],"license":"MIT","author":{"name":"AlmanacCode"},"repository":{"type":"git","url":"git+https://github.com/AlmanacCode/agentlogs.git","directory":"packages/node"},"devDependencies":{"@types/node":"^22.19.21","tsx":"^4.19.2","typescript":"^5.6.3"},"publishConfig":{"access":"public"},"_id":"@almanac-ai/agentlogs-node@0.1.0","gitHead":"85fe240348add6e7128e2efb80f6da3db7e8a6f5","bugs":{"url":"https://github.com/AlmanacCode/agentlogs/issues"},"homepage":"https://github.com/AlmanacCode/agentlogs#readme","_nodeVersion":"21.7.3","_npmVersion":"10.5.0","dist":{"integrity":"sha512-5ghEGmyjE68BkRZoiRBGozF+wlyr9nZIpYYnqGM1sE4YXgUDazun0ewIN0R4PrY5/3jVyxrM5yq8oyfwGz7jgw==","shasum":"b7a4597cecf2f06e7e09d26f86789f0684f865ca","tarball":"https://registry.npmjs.org/@almanac-ai/agentlogs-node/-/agentlogs-node-0.1.0.tgz","fileCount":14,"unpackedSize":17850,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDplx7Psc90MMgHUV1JaXpDPMf3eLULW3hwlt6EAaOZsQIgSGMMergxPE0tRrmBGEdmzvT19qXBbfXNdRC9OBDv02g="}]},"_npmUser":{"name":"reveriedev","email":"reveriedev.one@gmail.com"},"directories":{},"maintainers":[{"name":"reveriedev","email":"reveriedev.one@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/agentlogs-node_0.1.0_1781653392801_0.10777858300002019"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-16T23:43:12.599Z","0.1.0":"2026-06-16T23:43:12.965Z","modified":"2026-06-16T23:43:13.189Z"},"maintainers":[{"name":"reveriedev","email":"reveriedev.one@gmail.com"}],"description":"Structured local logs your coding agent can read — Node/Express SDK with one trace across services.","homepage":"https://github.com/AlmanacCode/agentlogs#readme","keywords":["logging","tracing","debugging","express","agents","observability"],"repository":{"type":"git","url":"git+https://github.com/AlmanacCode/agentlogs.git","directory":"packages/node"},"author":{"name":"AlmanacCode"},"bugs":{"url":"https://github.com/AlmanacCode/agentlogs/issues"},"license":"MIT","readme":"# @almanac-ai/agentlogs-node\n\nStructured local logs your coding agent can read — the Node/Express SDK. Writes\nthe same JSONL contract as the Python SDK and the CLI, so one `trace` stitches\nyour whole stack together. See the [repo root](../../README.md) and\n[contract](../../SPEC.md).\n\n```bash\nnpm install @almanac-ai/agentlogs-node\n```\n\n## Use\n\n```ts\nimport { logger, agentMiddleware, loggedFetch } from \"@almanac-ai/agentlogs-node\";\n\n// Express — per-request trace context + request.completed\napp.use(agentMiddleware({ service: \"backend\" }));\n\nconst log = logger(\"pages\");\nlog.info(\"publish.started\", { pageId });\n\nawait log.time(\"publish\", { pageId }, async () => {   // → publish.completed + duration_ms\n  await savePage(pageId);\n});\n\n// outbound calls carry the trace and log fetch lifecycle events\nawait loggedFetch(\"https://payments.internal/charge\", { method: \"POST\" });\n```\n\nNon-HTTP work (a worker, a script):\n\n```ts\nimport { startTrace, logger } from \"@almanac-ai/agentlogs-node\";\nconst log = logger(\"sync\");\nawait startTrace(\"nightly-sync\", async () => {\n  log.info(\"sync.started\");\n});\n```\n\n## API\n\n| Export | Does |\n|---|---|\n| `logger(name)` | a logger for one area of code |\n| `log.debug/info/warn/error(event, fields?)` | emit a structured event |\n| `log.time(name, fields?, fn)` | time an async/sync block |\n| `agentMiddleware({ service })` | Express/Connect per-request trace context |\n| `loggedFetch(url, init?)` | fetch that propagates the trace and logs fetch lifecycle events |\n| `startTrace(name, fn)` | begin a trace outside HTTP |\n| `configure({ service, file, enabled, environment })` | global config |\n| `buildTraceparent` / `parseTraceparent` | W3C header helpers |\n\n## Config\n\nOn by default → `~/.agentlogs/app.log`. `AGENTLOGS=0` disables; `AGENTLOGS_FILE`\noverrides the path (contained to `~/.agentlogs/` or temp). Trace context uses\n`AsyncLocalStorage`, so logs inside a request or `startTrace`/`time` block carry\nthe right ids without you passing anything.\n\n> For the browser/React side — `LoggingProvider`, browser `loggedFetch`, and the\n> ingest route — see [`@almanac-ai/agentlogs-next`](../next).\n\n## Develop\n\n```bash\nnpm install\nnpm run test:node\nnpm run build\n```\n","readmeFilename":"README.md","_rev":"1-9dee4d2b661909109d8dd0fa19990454"}