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 +6 -0
- package/CONTRIBUTING.md +4 -4
- package/README.md +4 -5
- package/SPEC-NOTES.md +1 -1
- package/VERIFICATION.md +39 -5
- package/dist/{chunk-I7YXGTRZ.js → chunk-P3T2DVCP.js} +13 -3
- package/dist/cli/index.js +7 -6
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -5
- package/dist/ui/assets/{index-DOE5bD9P.js → index-BQ3Ivj0y.js} +10 -10
- package/dist/ui/index.html +1 -1
- package/docs/SDK.md +5 -7
- package/package.json +1 -1
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
|
|
92
|
-
with working npm credentials can publish
|
|
93
|
-
|
|
94
|
-
|
|
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.
|
|
11
|
-
|
|
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.
|
|
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
|
|
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) |
|
|
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
|
|
5
|
-
|
|
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
|
-
-
|
|
803
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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
|
-
|
|
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,
|