{"_id":"@agentic-research/vespers-core","_rev":"3-037e380b75f3432e8f4796a71b157b8c","name":"@agentic-research/vespers-core","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@agentic-research/vespers-core","version":"0.1.0","keywords":["agent","agentic-workflows","board","durable-state","event-folding","issue-tracking","observability","tick","workflow"],"license":"Apache-2.0","_id":"@agentic-research/vespers-core@0.1.0","maintainers":[{"name":"jamestexas","email":"jamestexasgardner@gmail.com"}],"homepage":"https://github.com/agentic-research/canonical-hours/tree/main/packages/vespers","bugs":{"url":"https://github.com/agentic-research/canonical-hours/issues"},"dist":{"shasum":"65bc0313da3d507c1fa2b4b2c47f55702b8e460b","tarball":"https://registry.npmjs.org/@agentic-research/vespers-core/-/vespers-core-0.1.0.tgz","fileCount":19,"integrity":"sha512-0KM+dS2ahU236AvP5eJOSmzjGglUNk73EDeO8/TiJ+c+l+25fSR/lEKxMxzHztsdJszMf/7yNk47Saume+XG5g==","signatures":[{"sig":"MEUCIQDQniKVkDKkkt/zY+HA3IPVz0nLW9jENOjAlUgGXQCg1QIgU/NO8wLbd1vldz/0+oKv0QZl/tGbeIeqYe+VHwlH7C8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57008},"main":"./dist/index.js","type":"module","_from":"file:agentic-research-vespers-core-0.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.build.json","test:workerd":"vitest run --config vitest.workerd.config.mts"},"_npmUser":{"name":"jamestexas","email":"jamestexasgardner@gmail.com"},"_resolved":"/private/var/folders/h3/m8zflqfn203fxwfvhwqbt_c40000gn/T/01e4addfdf564b977b0c6aec7df15572/agentic-research-vespers-core-0.1.0.tgz","_integrity":"sha512-0KM+dS2ahU236AvP5eJOSmzjGglUNk73EDeO8/TiJ+c+l+25fSR/lEKxMxzHztsdJszMf/7yNk47Saume+XG5g==","repository":{"url":"git+https://github.com/agentic-research/canonical-hours.git","type":"git","directory":"packages/vespers"},"_npmVersion":"11.12.1","description":"Portable tick/fold engine for canonical-hours board state.","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","dependencies":{"zod":"^4.4.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.10","wrangler":"^4.113.0","@cloudflare/workers-types":"^5.20260722.1","@cloudflare/vitest-pool-workers":"0.18.7"},"_npmOperationalInternal":{"tmp":"tmp/vespers-core_0.1.0_1784829416117_0.8699303666991791","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@agentic-research/vespers-core","version":"0.1.1","keywords":["agent","agentic-workflows","board","durable-state","event-folding","issue-tracking","observability","tick","workflow"],"license":"Apache-2.0","_id":"@agentic-research/vespers-core@0.1.1","maintainers":[{"name":"jamestexas","email":"jamestexasgardner@gmail.com"}],"homepage":"https://github.com/agentic-research/canonical-hours/tree/main/packages/vespers","bugs":{"url":"https://github.com/agentic-research/canonical-hours/issues"},"dist":{"shasum":"2315e142b57a15a27ecdaa6fa96cbe2be8c1e7ed","tarball":"https://registry.npmjs.org/@agentic-research/vespers-core/-/vespers-core-0.1.1.tgz","fileCount":19,"integrity":"sha512-8xlcF96XRMVIQswY+O6E5MDiP9vYXa4I2myJ0f2mTaToxdKGm8ieWOMZBIAuRkSpls7m+YKV/MJwokh+Gmm7RQ==","signatures":[{"sig":"MEYCIQDnXQBOlroVXrN7HTMBOX7AEpWSXm1vu8tfm1U1wLQ9LwIhAM8JX+XDvHfNFWdLtStpUkyuv2Gph57TlNolhsCllh7o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57201},"main":"./dist/index.js","type":"module","_from":"file:agentic-research-vespers-core-0.1.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.build.json","test:package":"pnpm run build && node -e \"import('./dist/index.js').then(() => console.log('package import ok'))\"","test:workerd":"vitest run --config vitest.workerd.config.mts"},"_npmUser":{"name":"jamestexas","email":"jamestexasgardner@gmail.com"},"_resolved":"/private/var/folders/h3/m8zflqfn203fxwfvhwqbt_c40000gn/T/5fec4b7e450b93033a8d3634e0c343a1/agentic-research-vespers-core-0.1.1.tgz","_integrity":"sha512-8xlcF96XRMVIQswY+O6E5MDiP9vYXa4I2myJ0f2mTaToxdKGm8ieWOMZBIAuRkSpls7m+YKV/MJwokh+Gmm7RQ==","repository":{"url":"git+https://github.com/agentic-research/canonical-hours.git","type":"git","directory":"packages/vespers"},"_npmVersion":"11.12.1","description":"Portable tick/fold engine for canonical-hours board state.","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","dependencies":{"zod":"^4.4.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.10","wrangler":"^4.113.0","@cloudflare/workers-types":"^5.20260722.1","@cloudflare/vitest-pool-workers":"0.18.7"},"_npmOperationalInternal":{"tmp":"tmp/vespers-core_0.1.1_1784831039811_0.2975671438356171","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@agentic-research/vespers-core","version":"0.1.2","type":"module","description":"Portable tick/fold engine for canonical-hours board state.","license":"Apache-2.0","keywords":["agent","agentic-workflows","board","durable-state","event-folding","issue-tracking","observability","tick","workflow"],"repository":{"type":"git","url":"git+https://github.com/agentic-research/canonical-hours.git","directory":"packages/vespers"},"homepage":"https://github.com/agentic-research/canonical-hours/tree/main/packages/vespers","bugs":{"url":"https://github.com/agentic-research/canonical-hours/issues"},"sideEffects":false,"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"dependencies":{"zod":"^4.4.3"},"devDependencies":{"@cloudflare/vitest-pool-workers":"0.18.7","@cloudflare/workers-types":"^5.20260722.1","wrangler":"^4.113.0","vitest":"4.1.10"},"scripts":{"build":"tsc -p tsconfig.build.json","test:package":"pnpm run build && node -e \"import('./dist/index.js').then(() => console.log('package import ok'))\"","test:workerd":"vitest run --config vitest.workerd.config.mts"},"_id":"@agentic-research/vespers-core@0.1.2","_integrity":"sha512-K4XAzWuppJb6pvrSeyRJo2RFTDGZzc1u6HVFt1LmqasBNF9X4W6M2tDVY09/RGvGzNSlgOGAoDGCLZteKzTJiw==","_resolved":"/private/var/folders/h3/m8zflqfn203fxwfvhwqbt_c40000gn/T/0df04b3f846f40496f9dcad9d3df95ef/agentic-research-vespers-core-0.1.2.tgz","_from":"file:agentic-research-vespers-core-0.1.2.tgz","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-K4XAzWuppJb6pvrSeyRJo2RFTDGZzc1u6HVFt1LmqasBNF9X4W6M2tDVY09/RGvGzNSlgOGAoDGCLZteKzTJiw==","shasum":"bb24b706d2a349726759879810261b1a1cc67551","tarball":"https://registry.npmjs.org/@agentic-research/vespers-core/-/vespers-core-0.1.2.tgz","fileCount":21,"unpackedSize":60925,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFjeRdDv727X5lyg6oxNpb5bvOik8m3pXJaQ/twqqWYFAiAbIj0ALDVbDyuiKixNeyxAYYybS3WAfDRShQ+HmSfcxQ=="}]},"_npmUser":{"name":"jamestexas","email":"jamestexasgardner@gmail.com"},"directories":{},"maintainers":[{"name":"jamestexas","email":"jamestexasgardner@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vespers-core_0.1.2_1784913551994_0.047011087437193844"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-23T17:56:55.540Z","modified":"2026-07-24T17:19:12.354Z","0.1.0":"2026-07-23T17:56:56.253Z","0.1.1":"2026-07-23T18:23:59.983Z","0.1.2":"2026-07-24T17:19:12.185Z"},"bugs":{"url":"https://github.com/agentic-research/canonical-hours/issues"},"license":"Apache-2.0","homepage":"https://github.com/agentic-research/canonical-hours/tree/main/packages/vespers","keywords":["agent","agentic-workflows","board","durable-state","event-folding","issue-tracking","observability","tick","workflow"],"repository":{"type":"git","url":"git+https://github.com/agentic-research/canonical-hours.git","directory":"packages/vespers"},"description":"Portable tick/fold engine for canonical-hours board state.","maintainers":[{"name":"jamestexas","email":"jamestexasgardner@gmail.com"}],"readme":"# `@agentic-research/vespers-core`\n\nPortable tick/fold engine for agentic board state.\n\nVespers is the runtime-neutral core extracted from\n[`canonical-hours`](https://github.com/agentic-research/canonical-hours). It\ngeneralizes the durable parts of an Eve agent — source protocols, lifecycle\nevents, deterministic merge/fold logic, board schema, markdown rendering, config\nparsing, and the `runTick()` loop — so the same board engine can run outside a\nNode-hosted Eve process.\n\n## Why This Exists\n\ncanonical-hours is the standing Eve agent that schedules ticks, hosts the MCP\nsurface, and wires concrete integrations. Vespers is the portable kernel under\nthat agent: no Eve dependency, no Node filesystem dependency, and no assumption\nabout the host runtime.\n\nThat split lets downstream hosts reuse the same board semantics in environments\nlike Cloudflare Workers `workerd`, cloister isolates, Durable Objects, or a\nfuture Wasm-backed runtime. The package is tested both under Node/Vitest and\nunder a simulated Cloudflare Workers `workerd` runtime.\n\n## Install\n\n```sh\npnpm add @agentic-research/vespers-core\n```\n\n## Use\n\n```ts\nimport {\n  BoardSchema,\n  runTick,\n  renderBoardMd,\n  type BoardStore,\n  type Source,\n} from \"@agentic-research/vespers-core\";\n```\n\n`Source` implementations fetch observations from systems like GitHub, Linear,\nLectio, weather, or private registries. `BoardStore` is the one storage seam:\nbring your own filesystem, KV, Durable Object, database, or in-memory adapter.\n\n```ts\nlet board = null;\nconst boardStore: BoardStore = {\n  async read() {\n    return board;\n  },\n  async write(next) {\n    board = BoardSchema.parse(next);\n  },\n};\n\nconst result = await runTick({\n  sources,\n  now: new Date(),\n  priority: [\"github\", \"linear\"],\n  boardStore,\n  invokeAgent: async ({ merged, freshness, degradations, window }) => {\n    await boardStore.write({\n      generated_at: new Date().toISOString(),\n      tick_status: \"ok\",\n      window,\n      freshness,\n      degradations,\n      items: [],\n    });\n  },\n});\n\nconsole.log(result);\nconsole.log(board ? renderBoardMd(board) : \"No board written\");\n```\n\n## Exports\n\n| export | purpose |\n| --- | --- |\n| `runTick()` | Fetch sources, merge lifecycle events, fold board state, and persist it through a `BoardStore`. |\n| `mergeEvents()` / `foldState()` | Deterministic event ordering and pure state folding. |\n| `BoardSchema` / `ConfigSchema` | Zod schemas for board and config validation. |\n| `renderBoardMd()` | Markdown renderer for board snapshots. |\n| `Source` / `SnapshotSource` | Protocols for event and snapshot producers. |\n| `BoardStore` | Minimal persistence interface for host runtimes. |\n\n## Design Notes\n\nVespers models PRs, issues, and snapshots as observations over artifacts rather\nthan as GitHub-specific records. That keeps integrations thin: a new source adds\nevents to the protocol instead of rewriting the fold engine.\n\nThe canonical Node/Eve integration lives in canonical-hours. This package is the\nportable kernel intended for downstream hosts, including workerd-style runtimes.\n","readmeFilename":"README.md"}