{"_id":"@desek/pi-mlflow-tracing","_rev":"2-4f9b9b47a64dc86feb4dac5c1d3898f4","name":"@desek/pi-mlflow-tracing","dist-tags":{"latest":"0.1.0"},"versions":{"0.0.1":{"name":"@desek/pi-mlflow-tracing","version":"0.0.1","keywords":["pi-package","pi","coding-agent","mlflow","conversation","tracing","opentelemetry","observability"],"author":{"name":"desek"},"license":"Apache-2.0","_id":"@desek/pi-mlflow-tracing@0.0.1","maintainers":[{"name":"desek","email":"daniel@grenemark.se"}],"homepage":"https://github.com/desek/agent-observability/tree/main/packages/pi-mlflow-tracing#readme","bugs":{"url":"https://github.com/desek/agent-observability/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"62e892970d1b40cedd6d32ee7076bcc0051cdcd9","tarball":"https://registry.npmjs.org/@desek/pi-mlflow-tracing/-/pi-mlflow-tracing-0.0.1.tgz","fileCount":9,"integrity":"sha512-qCEyGfNt+6xXrXNQ/0MhanJwJZLYtxZUOn1uz6NJ3twndi5LN3x9gQ5vmNHbGVcGiNUMI1DAZQ0qxNQXZ8eHlA==","signatures":[{"sig":"MEUCIQCSncfj/xBa+o1DDgLUZH1MFQFJAqmguvHasGszUWja2QIgSgmHqBk3ovRj2vn9x8BIeQT+LBdE1H/ILK7tlsgsDX0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69205},"type":"module","engines":{"node":">=22.14.0"},"gitHead":"32b69cf95d0bf834600964aabab60b01b7a432ec","scripts":{"test":"node --experimental-strip-types --test 'src/*.test.ts'"},"_npmUser":{"name":"desek","email":"daniel@grenemark.se"},"repository":{"url":"git+https://github.com/desek/agent-observability.git","type":"git","directory":"packages/pi-mlflow-tracing"},"_npmVersion":"11.12.1","description":"pi coding-agent extension that reconstructs each agent loop as an OpenTelemetry span tree and exports it to an MLflow tracking server so a pi conversation is readable turn by turn, defaulting to this project's local stack. It installs as a no-op: it recor","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@earendil-works/pi-coding-agent":"^0.80.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-mlflow-tracing_0.0.1_1785843263664_0.4383165025816098","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@desek/pi-mlflow-tracing","version":"0.1.0","description":"pi coding-agent extension that reconstructs each agent loop as an OpenTelemetry span tree and exports it to an MLflow tracking server so a pi conversation is readable turn by turn, defaulting to this project's local stack. It installs as a no-op: it recor","license":"Apache-2.0","author":{"name":"desek"},"type":"module","repository":{"type":"git","url":"git+https://github.com/desek/agent-observability.git","directory":"packages/pi-mlflow-tracing"},"homepage":"https://github.com/desek/agent-observability/tree/main/packages/pi-mlflow-tracing#readme","bugs":{"url":"https://github.com/desek/agent-observability/issues"},"keywords":["pi-package","pi","coding-agent","mlflow","conversation","tracing","opentelemetry","observability"],"engines":{"node":">=22.14.0"},"publishConfig":{"access":"public"},"scripts":{"test":"node --experimental-strip-types --test 'src/*.test.ts'"},"pi":{"extensions":["./src/index.ts"]},"devDependencies":{"@earendil-works/pi-coding-agent":"^0.80.3"},"gitHead":"34949825271f65736eac77c10438983609b69710","_id":"@desek/pi-mlflow-tracing@0.1.0","_nodeVersion":"22.14.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-KSo8uAnbfkR5LqOogcFEl9C8NrlJa+352/LNR/iXBUcZaHZNEgwIlvIXJvmb7/vd33a25DRxe00tf3HOGn067A==","shasum":"82f9d89a9a44add21589544462db46ba67ec3650","tarball":"https://registry.npmjs.org/@desek/pi-mlflow-tracing/-/pi-mlflow-tracing-0.1.0.tgz","fileCount":9,"unpackedSize":70980,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@desek%2fpi-mlflow-tracing@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCdZOvwpqFbkKfLI5Bmnnu5kmMCAMNDuVci9rkXUeHzuAIhAMLeDbq3lm/MvHo5DAtURv68z0N/u4kfhaGqMmKHdOhW"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a6d804c4-e1ac-49bc-ab9e-1fc723f757f0"}},"directories":{},"maintainers":[{"name":"desek","email":"daniel@grenemark.se"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-mlflow-tracing_0.1.0_1785848962728_0.11773477447851399"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-04T11:34:23.486Z","modified":"2026-08-04T13:09:23.481Z","0.0.1":"2026-08-04T11:34:23.858Z","0.1.0":"2026-08-04T13:09:22.884Z"},"bugs":{"url":"https://github.com/desek/agent-observability/issues"},"author":{"name":"desek"},"license":"Apache-2.0","homepage":"https://github.com/desek/agent-observability/tree/main/packages/pi-mlflow-tracing#readme","keywords":["pi-package","pi","coding-agent","mlflow","conversation","tracing","opentelemetry","observability"],"repository":{"type":"git","url":"git+https://github.com/desek/agent-observability.git","directory":"packages/pi-mlflow-tracing"},"description":"pi coding-agent extension that reconstructs each agent loop as an OpenTelemetry span tree and exports it to an MLflow tracking server so a pi conversation is readable turn by turn, defaulting to this project's local stack. It installs as a no-op: it recor","maintainers":[{"name":"desek","email":"daniel@grenemark.se"}],"readme":"<!--\n@agents-index: Public README for @desek/pi-mlflow-tracing, the pi coding-agent\nMLflow conversation-tracing extension. Documents what it records, how to switch\nit on and off, where the conversation is stored, the operational contract, and\nits safe-by-default posture, for a reader who has never seen this repository.\n-->\n\n# @desek/pi-mlflow-tracing\n\nAn MLflow conversation-tracing extension for the\n[pi](https://github.com/earendil-works/pi) coding agent. It turns each pi agent\nloop into an OpenTelemetry span tree and exports it to an MLflow tracking server,\nso a pi session becomes readable turn by turn: a root span holds the prompt and\nthe final response, a child span holds each turn with its model and token counts,\nand a child span holds each tool call under the turn that made it.\n\nThe extension is safe to install anywhere. It records nothing until you enable\nit, it stays silent when no tracking server is reachable, and a telemetry fault\ncan never crash, block, or slow the agent. See\n[Operational contract](#operational-contract).\n\n## Install\n\n```bash\npi install npm:@desek/pi-mlflow-tracing\n```\n\nThis registers the extension with pi. It stays dormant until you enable it.\n\n## Enable\n\nThe extension is a hard no-op until you set its master switch. Enabling it is\nalways a deliberate act, because it records conversation content:\n\n```bash\nexport PI_MLFLOW_ENABLE=1\npi -p \"say hi\"\n```\n\nWith `PI_MLFLOW_ENABLE` unset, or set to a false value (`0`, `false`, `no`,\n`off`, or empty), the extension registers no handler, constructs no exporter, and\nopens no connection.\n\nBy default the export goes to this project's local observability stack, reached\nthrough its single edge port, and lands in the `pi` experiment. A user who runs\nthat stack sets nothing but the switch. A user whose tracking server lives\nelsewhere points the extension at it through the environment rather than a code\nchange.\n\n## Disable\n\nUnset the switch, and the extension is a no-op again on the next session:\n\n```bash\nunset PI_MLFLOW_ENABLE\n```\n\n## What it records\n\nWhen enabled, every prompt, every assistant response, and every tool input and\nresult of the session is exported to the configured tracking server and stored\nthere until you delete it. This is the most sensitive data the extension\ntouches, which is why it is off by default and why the default destination is the\nlocal machine.\n\nConversation content leaves the machine only if you configure a destination that\nis not a loopback address. When you do, the extension names that destination once\nat session start, so sending content off the machine is never silent.\n\n## Operational contract\n\nThese guarantees are what let you trust the extension in every pi session.\n\n1. **Off by default.** With the master switch unset the extension records\n   nothing, constructs no exporter, and opens no connection.\n2. **Silent when the server is absent.** With tracing enabled but no reachable\n   tracking server, the extension stays silent rather than retrying into a dead\n   endpoint, so installing it on a machine without a stack costs nothing.\n3. **Content stays local by default.** The default destination is the local\n   tracking server; a destination off the machine is a deliberate configuration\n   and is named to you when it is used.\n4. **It never breaks the agent.** An export failure, an unreachable server, or a\n   malformed configuration is swallowed. No telemetry fault raises into the\n   agent, blocks a turn, or changes agent behaviour.\n\n## License\n\nApache-2.0.\n","readmeFilename":"README.md"}