taximeter 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Taximeter
2
2
 
3
+ ## 0.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Publish the complete local x402 spend meter after the npm ownership bootstrap. Include the proxy, fetch SDK, exact ledger, budget enforcement, CLI exports, prebuilt dashboard, and tested documentation. Improve release authentication diagnostics and keep package verification aligned with the release version.
8
+
3
9
  ## 0.1.0
4
10
 
5
11
  ### Minor Changes
package/CONTRIBUTING.md CHANGED
@@ -88,10 +88,10 @@ change package behavior.
88
88
 
89
89
  The release workflow uses Changesets on `main` to prepare version changes and
90
90
  publish after the release pull request is merged. With no pending changesets,
91
- the action also publishes an unpublished version; the **first push to `main`
92
- with working npm credentials can publish v0.1.0 directly**. Enable credentials
93
- only when that initial release is intended. Maintainers configure npm
94
- credentials separately. `npm run version-packages` updates package versions and
91
+ the action also publishes the current version if npm does not yet contain it.
92
+ A push to `main` with working npm credentials can therefore publish directly.
93
+ Maintainers configure npm credentials separately.
94
+ `npm run version-packages` updates package versions and
95
95
  the changelog; `npm run release` builds and runs Changesets publishing. Publishing
96
96
  requires maintainer authorization and credentials. The presence of that workflow
97
97
  does not mean any package version has already been published.
package/README.md CHANGED
@@ -7,9 +7,8 @@ npx taximeter start
7
7
  ```
8
8
 
9
9
  Taximeter records supported agent payments, checks budgets before forwarding them,
10
- and keeps an exact local ledger. **This is the unpublished v0.1.0 source release.**
11
- The registry command above becomes available after publication; the three-command
12
- source quickstart below works today. Requires Node 20 or newer.
10
+ and keeps an exact local ledger. Install from npm with the command above, or build
11
+ from source with the quickstart below. Requires Node 20 or newer.
13
12
 
14
13
  ## A 20-second demo
15
14
 
@@ -51,7 +50,7 @@ Open a terminal in this source checkout, with Node 20+ and npm installed.
51
50
  You should now see:
52
51
 
53
52
  ```text
54
- Taximeter 0.1.0
53
+ Taximeter 0.1.1
55
54
  Proxy: http://127.0.0.1:8402
56
55
  Dashboard: http://127.0.0.1:8403
57
56
  Point an HTTP-proxy-aware agent at http://127.0.0.1:8402.
@@ -193,7 +192,7 @@ Host/recipient denials have `budget: null` and `remaining: null`.
193
192
  - A wallet or facilitator: it never holds keys or funds, signs, verifies, or settles payments.
194
193
  - A cloud service: no accounts, telemetry, analytics, or external font requests.
195
194
  - A multi-user service: no authentication, tenancy, or RBAC. Both listeners bind to loopback.
196
- - A universal payment parser: Permit2, ERC-7710, non-EVM rails, Stripe MPP, and cards are outside v0.1.0.
195
+ - A universal payment parser: Permit2, ERC-7710, non-EVM rails, Stripe MPP, and cards are unsupported.
197
196
  - A security boundary against a bypassing agent: unsupported traffic passes through with diagnostics. CONNECT and post-upgrade frames are unmetered. Storage failure also passes traffic and prints a warning, so budget guarantees require working storage.
198
197
 
199
198
  Raw payment authorizations stay in the local audit ledger and JSON export. Treat
package/SPEC-NOTES.md CHANGED
@@ -36,7 +36,7 @@ unless a row names one intake specifically.
36
36
  | Export and invoice format (§2, §5) | CSV includes all derived payment rows: `amount` is the counted contribution, while `authorizedAmount` preserves the original proposal. Blocked and wholly failed payments contribute zero. Sum each network/asset separately to reproduce the dashboard ledger totals. The invoice is standalone printable HTML, with no PDF renderer, exchange-rate conversion, tax calculation, or settlement attestation. |
37
37
  | Module and dependency choices (§7) | Ship ESM only, with no optional CommonJS build. Pin `better-sqlite3` 12.8.0 to preserve Node 20 support; version 13 requires Node 22. Exact pins and the audited esbuild override are recorded in `package.json` and the lockfile. |
38
38
  | Fixture realism and financial claims (§7) | Fixture envelopes follow primary protocol examples but all authorizations, signatures, and settlement responses are synthetic. Tests exercise parsing, transport, budget races, failures, and exact accounting; no real transfers, wallet signing, facilitator call, or independent chain verification is performed. |
39
- | Public installation and repository tagline (§1, §6) | `npm view taximeter` returned `E404` on **2026-09-08**, so the package name remains `taximeter` and registry installation is not yet available. The README retains the required `npx taximeter start` release command and provides source-build commands for current use. Fresh-directory startup from the local tarball is documented in `VERIFICATION.md`. Registry publication and repository visibility are maintainer-managed release settings. The intended repository description is **A taximeter for your AI agents.** |
39
+ | Public installation and repository tagline (§1, §6) | The initial registry check returned `E404`; npm ownership was subsequently established with `0.1.0`. The release package uses `0.1.1`, and the README provides both `npx taximeter start` and source-build instructions. Fresh-directory startup from the local tarball is documented in `VERIFICATION.md`. Repository visibility is a maintainer-managed setting. The intended repository description is **A taximeter for your AI agents.** |
40
40
 
41
41
  These limitations make Taximeter a cooperative local meter. An agent that
42
42
  bypasses the intake, uses an unsupported payment method, or hides a replay
package/VERIFICATION.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Release verification
2
2
 
3
- The release passed the local clean-checkout audit on `feat/taximeter-v0.1.0`.
4
- The hosted release build also completed; publishing requires npm credentials as
5
- described below. Public npm publication is not claimed.
3
+ The initial release passed the local clean-checkout audit on `feat/taximeter-v0.1.0`.
4
+ The historical audit transcripts below cover version 0.1.0. npm ownership was
5
+ subsequently established with that version; the next release is 0.1.1.
6
6
 
7
7
  ## Behavioral evidence
8
8
 
@@ -799,8 +799,8 @@ Screenshots: <CHECKOUT>/tmp/dashboard-qa
799
799
  desktop, and Linux browser rendering have not been exercised here.
800
800
  - Native Windows ConPTY capture and agg encoding were executed for the follow-up
801
801
  demo recording documented below. VHS and asciinema command-line recipes have not been run.
802
- - The npm name remains unpublished. The README's source commands work before
803
- publication; its registry command requires the first public release.
802
+ - Historical registry-authentication failures below preceded npm ownership setup.
803
+ The 0.1.1 checks and release status are recorded separately from those transcripts.
804
804
  - Long-running/high-volume ledger performance, disk exhaustion, and OS crash
805
805
  recovery have not been stress-tested. Storage failures preserve traffic and
806
806
  can prevent enforcement; hidden redirects, unsupported forms, and encrypted
@@ -941,3 +941,37 @@ PASS all publishing preflight checks; npm was stubbed and nothing was published.
941
941
 
942
942
  The repository owner must supply a publishing-capable Actions secret before the
943
943
  hosted release can succeed. No live publication is represented by these checks.
944
+
945
+ ## Version 0.1.1 release checks
946
+
947
+ The package version is now the source for the CLI, SDK, dashboard API, and archive
948
+ validation. This prevents runtime version strings from lagging behind a Changesets
949
+ release. Version 0.1.1 was generated through `npm run version-packages` with the
950
+ matching package-lock metadata and changelog.
951
+
952
+ On Windows with Node 24.13.0, typecheck, lint, all 298 tests, the build, package
953
+ validation, isolated archive installation/startup, and CLI version checks passed.
954
+ Ledger and policy coverage remained 100% in all four metrics. The isolated smoke
955
+ check verified both listeners, the empty dashboard summary, prebuilt assets, and
956
+ an installation directory with no configuration file.
957
+
958
+ Captured final package-check output before adding this transcript:
959
+
960
+ ```text
961
+ > taximeter@0.1.1 lint
962
+ > biome check --error-on-warnings .
963
+
964
+ Checked 58 files in 45ms. No fixes applied.
965
+
966
+ > taximeter@0.1.1 check:package
967
+ > node scripts/check-package.mjs
968
+
969
+ Package verified: taximeter-0.1.1.tgz
970
+ 246248 bytes compressed; 648100 bytes unpacked; 25 files.
971
+ Both CLI aliases, ESM entry point, declarations, and prebuilt UI are present.
972
+ 26 relative Markdown file links resolve inside the package.
973
+ Files whitelist honored; no UI source maps, source tree, tests, dependencies, or local state.
974
+ ```
975
+
976
+ `node dist/cli/index.js --version` returned `0.1.1`. Subsequent archive sizes include
977
+ this transcript; the same package validation enforces the size limit.
@@ -818,10 +818,10 @@ var Ledger = class {
818
818
  "SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'schema_version'"
819
819
  ).get();
820
820
  if (!table) this.database.exec(__default);
821
- const version = z7.object({ version: z7.literal(1) }).parse(
821
+ const version3 = z7.object({ version: z7.literal(1) }).parse(
822
822
  this.database.prepare("SELECT MAX(version) AS version FROM schema_version").get()
823
823
  );
824
- return version.version;
824
+ return version3.version;
825
825
  }).immediate();
826
826
  } catch (error) {
827
827
  this.database.close();
@@ -1136,6 +1136,15 @@ async function closeProxy(server) {
1136
1136
  );
1137
1137
  }
1138
1138
 
1139
+ // src/version.ts
1140
+ import { z as z9 } from "zod";
1141
+
1142
+ // package.json
1143
+ var version = "0.1.1";
1144
+
1145
+ // src/version.ts
1146
+ var version2 = z9.string().regex(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/).parse(version);
1147
+
1139
1148
  export {
1140
1149
  integerStringSchema,
1141
1150
  httpUrlSchema,
@@ -1163,5 +1172,6 @@ export {
1163
1172
  toInvoice,
1164
1173
  Ledger,
1165
1174
  createProxy,
1166
- closeProxy
1175
+ closeProxy,
1176
+ version2 as version
1167
1177
  };
package/dist/cli/index.js CHANGED
@@ -20,8 +20,9 @@ import {
20
20
  toInvoice,
21
21
  toJson,
22
22
  totalSchema,
23
- totals
24
- } from "../chunk-I7YXGTRZ.js";
23
+ totals,
24
+ version
25
+ } from "../chunk-P3T2DVCP.js";
25
26
 
26
27
  // src/cli/index.ts
27
28
  import { CommanderError } from "commander";
@@ -48,7 +49,7 @@ import { z } from "zod";
48
49
  var dashboardEventSchema = paymentEventSchema.omit({ raw: true });
49
50
  var groupSchema = totalSchema.extend({ key: z.string().nullable() });
50
51
  var dashboardStateSchema = z.object({
51
- version: z.literal("0.1.0"),
52
+ version: z.literal(version),
52
53
  generatedAt: z.iso.datetime(),
53
54
  totalEvents: z.number().int(),
54
55
  blockedEvents: z.number().int(),
@@ -121,7 +122,7 @@ function dashboardState(ledger, config, now = Date.now()) {
121
122
  return { ts: new Date(start).toISOString(), totals: totals(rows) };
122
123
  });
123
124
  return dashboardStateSchema.parse({
124
- version: "0.1.0",
125
+ version,
125
126
  generatedAt: new Date(now).toISOString(),
126
127
  totalEvents: events.length,
127
128
  blockedEvents: events.filter((event) => event.status === "blocked").length,
@@ -358,7 +359,7 @@ function configFrom(flags) {
358
359
  }
359
360
  async function runCli(input, output = (text) => process.stdout.write(text)) {
360
361
  const argv = z4.array(z4.string()).parse(input);
361
- const program = new Command().name("taximeter").description("A taximeter for your AI agents.").version("0.1.0").exitOverride();
362
+ const program = new Command().name("taximeter").description("A taximeter for your AI agents.").version(version).exitOverride();
362
363
  program.configureOutput({ writeOut: output, writeErr: (text) => process.stderr.write(text) });
363
364
  options(program.command("start").description("Start the local proxy and dashboard")).option("--proxy-port <port>", "Proxy port (0 selects an available port)").option("--dashboard-port <port>", "Dashboard port").option("--upstream <url>", "Forward origin-form requests to this HTTP(S) upstream").action(async (raw) => {
364
365
  const flags = startFlags.parse(raw);
@@ -375,7 +376,7 @@ async function runCli(input, output = (text) => process.stdout.write(text)) {
375
376
  );
376
377
  const running = await startServices(config);
377
378
  output(
378
- `Taximeter 0.1.0
379
+ `Taximeter ${version}
379
380
  Proxy: http://127.0.0.1:${running.proxyPort}
380
381
  Dashboard: http://127.0.0.1:${running.dashboardPort}
381
382
  Point an HTTP-proxy-aware agent at http://127.0.0.1:${running.proxyPort}.
package/dist/index.d.ts CHANGED
@@ -399,6 +399,6 @@ type MeteredFetch = typeof globalThis.fetch & {
399
399
  /** Place inside the payment wrapper: wrapFetchWithPayment(withMeter(fetch, opts), client). */
400
400
  declare function withMeter(fetchImpl: typeof globalThis.fetch, input?: MeterOptions): MeteredFetch;
401
401
 
402
- declare const version = "0.1.0";
402
+ declare const version: string;
403
403
 
404
404
  export { Ledger, Meter, type MeterOptions, type MeteredFetch, type PaymentEvent, type Rail, type TaximeterConfig, X402Rail, closeProxy, createProxy, deriveEvents, evaluate, formatAmount, loadConfig, parseConfig, paymentEventSchema, toCsv, toInvoice, toJson, totals, version, withMeter };
package/dist/index.js CHANGED
@@ -16,8 +16,9 @@ import {
16
16
  toCsv,
17
17
  toInvoice,
18
18
  toJson,
19
- totals
20
- } from "./chunk-I7YXGTRZ.js";
19
+ totals,
20
+ version
21
+ } from "./chunk-P3T2DVCP.js";
21
22
 
22
23
  // src/sdk/index.ts
23
24
  import { z } from "zod";
@@ -158,9 +159,6 @@ function withMeter(fetchImpl, input = {}) {
158
159
  }
159
160
  });
160
161
  }
161
-
162
- // src/index.ts
163
- var version = "0.1.0";
164
162
  export {
165
163
  Ledger,
166
164
  Meter,