@danypops/jittor 0.18.0 → 0.19.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/package.json CHANGED
@@ -1,10 +1,15 @@
1
1
  {
2
2
  "name": "@danypops/jittor",
3
- "version": "0.18.0",
3
+ "version": "0.19.1",
4
4
  "description": "Just-in-Time Token Optimization Router for Pi -- token and context observability with optimization policies",
5
5
  "type": "module",
6
6
  "main": "./src/index.ts",
7
7
  "types": "./src/index.ts",
8
+ "exports": {
9
+ ".": "./src/index.ts",
10
+ "./package.json": "./package.json"
11
+ },
12
+ "sideEffects": false,
8
13
  "keywords": ["llm-router", "token-budget"],
9
14
  "bin": {
10
15
  "jittor": "src/cli.ts"
@@ -15,10 +20,21 @@
15
20
  "serve": "bun src/cli.ts serve",
16
21
  "service:install": "bun src/cli.ts service install"
17
22
  },
23
+ "packed": {
24
+ "daemonService": {
25
+ "name": "jittor",
26
+ "displayName": "Jittor",
27
+ "binPath": "src/cli.ts",
28
+ "args": ["serve"],
29
+ "handleFilename": "daemon.json",
30
+ "restartOnFailure": true,
31
+ "restartSec": 2
32
+ }
33
+ },
18
34
  "dependencies": {
19
- "@danypops/vehicle-core": "^0.12.1",
20
- "@danypops/vehicle-server": "^0.17.0",
21
- "@danypops/vehicle-client": "^0.5.1",
35
+ "@danypops/vehicle-core": "^0.17.1",
36
+ "@danypops/vehicle-server": "^0.24.5",
37
+ "@danypops/vehicle-client": "^0.10.1",
22
38
  "google-auth-library": "^10.9.0",
23
39
  "gpt-tokenizer": "^3.4.0"
24
40
  },
package/src/index.ts CHANGED
@@ -6,7 +6,141 @@ export {
6
6
  parseAnthropicRateLimitHeaders,
7
7
  } from "./anthropic/rate-limits.ts";
8
8
  export { parseCodexRateLimitHeaders } from "./codex/telemetry.ts";
9
- export * from "./constants.ts";
9
+ export {
10
+ BENCHMARK_DEFAULT_QUERY_LIMIT,
11
+ BENCHMARK_IDENTITY_MAX_CHARACTERS,
12
+ BENCHMARK_MAX_MODELS_PER_SOURCE,
13
+ BENCHMARK_MAX_OBSERVATIONS_PER_SNAPSHOT,
14
+ BENCHMARK_MAX_QUERY_LIMIT,
15
+ BENCHMARK_MAX_TEXT_CHARACTERS,
16
+ BENCHMARK_REFRESH_INTERVAL_MS,
17
+ BENCHMARK_SOURCE_MAX_RESPONSE_BYTES,
18
+ BENCHMARK_SOURCE_MAX_TOTAL_RESPONSE_BYTES,
19
+ BENCHMARK_STORE_QUERY_LIMIT,
20
+ BENCHMARK_TUI_MAX_CANDIDATES,
21
+ BENCHMARK_TUI_MAX_PROVENANCE_PER_CANDIDATE,
22
+ CACHE_ECONOMICS_LOSS_CORRELATION_WINDOW_MS,
23
+ CACHE_ECONOMICS_MAX_MISSED_OPPORTUNITIES,
24
+ CACHE_ECONOMICS_MAX_MODEL_GROUPS,
25
+ CACHE_ECONOMICS_MAX_STABLE_PREFIX_POINTS,
26
+ CACHE_ECONOMICS_MAX_TASK_GROUPS,
27
+ CACHE_ECONOMICS_QUERY_LIMIT,
28
+ CATALOG_LONG_CONTEXT_THRESHOLD_TOKENS,
29
+ CATALOG_PRICE_TOKEN_UNIT,
30
+ CLI_AVAILABLE_ROUTES_MAX,
31
+ CLI_METRICS_HUMAN_MAX_ROWS,
32
+ CODEX_ERROR_MESSAGE_LIMIT,
33
+ CODEX_RECOVERY_ATTEMPT_WINDOW_MS,
34
+ CODEX_RECOVERY_BASE_DELAY_MS,
35
+ CODEX_RECOVERY_JITTER_RATIO,
36
+ CODEX_RECOVERY_MAX_ATTEMPTS,
37
+ CODEX_RECOVERY_MAX_DELAY_MS,
38
+ CODEX_RETRY_AFTER_MAX_MS,
39
+ COMPACTION_DURATION_ESTIMATE_MAX_SAMPLES,
40
+ COMPACTION_DURATION_ESTIMATE_MIN_SAMPLES,
41
+ CONTEXT_ASSESSMENT_DEFAULT_WINDOW_MS,
42
+ CONTEXT_ASSESSMENT_QUERY_LIMIT,
43
+ CONTEXT_DEFAULT_RESERVE_TOKENS,
44
+ CONTEXT_ESTIMATE_CHARACTERS_PER_TOKEN,
45
+ CONTEXT_EVENT_DEDUP_LIMIT,
46
+ CONTEXT_HUB_CONFIDENCE_TIERS,
47
+ CONTEXT_HUB_CONTRIBUTION_CHANNEL,
48
+ CONTEXT_HUB_CONTRIBUTION_DEDUP_LIMIT,
49
+ CONTEXT_HUB_CONTRIBUTION_MAX_AGE_MS,
50
+ CONTEXT_HUB_CONTRIBUTION_SCHEMA,
51
+ CONTEXT_HUB_ITEM_LABEL_MAX_CHARACTERS,
52
+ CONTEXT_HUB_MAX_ITEM_DEPTH,
53
+ CONTEXT_HUB_MAX_ITEMS_PER_SEGMENT,
54
+ CONTEXT_HUB_PRODUCER_NAME_MAX_CHARACTERS,
55
+ CONTEXT_HUB_SEGMENT_KEY_MAX_CHARACTERS,
56
+ CONTEXT_HUB_SEGMENT_LABEL_MAX_CHARACTERS,
57
+ CONTEXT_OBSERVATION_MAX_AGE_MS,
58
+ CONTEXT_OBSERVATION_MAX_CHARACTERS,
59
+ CONTEXT_TREE_MAX_NODES,
60
+ DATABASE_FILENAME,
61
+ DEFAULT_QUERY_LIMIT,
62
+ FOOTER_BAR_MAX_WIDTH,
63
+ FOOTER_BAR_MIN_WIDTH,
64
+ FOOTER_COMPACTION_BLINK_HALF_PERIOD_MS,
65
+ FOOTER_COMPACTION_RENDER_INTERVAL_MS,
66
+ FOOTER_CONTEXT_ACCENT_FRACTION,
67
+ FOOTER_CONTEXT_ERROR_FRACTION,
68
+ FOOTER_CONTEXT_WARNING_FRACTION,
69
+ FOOTER_WIDE_TERMINAL_WIDTH,
70
+ GOOGLE_ADC_TOKEN_REFRESH_SKEW_MS,
71
+ GOOGLE_VERTEX_BUDGET_CONFIDENCE,
72
+ GOOGLE_VERTEX_BUDGET_DISPLAY_NAME_MAX_CHARACTERS,
73
+ GOOGLE_VERTEX_BUDGET_MAX_MESSAGES_PER_PULL,
74
+ HANDLE_FILENAME,
75
+ HUMAN_STATUS_MAX_SOURCES,
76
+ HUMAN_TEXT_FIELD_MAX_CHARACTERS,
77
+ JITTOR_EXTENSION_SETTINGS_FILENAME,
78
+ JITTOR_STATE_DIRECTORY,
79
+ MAINTENANCE_INTERVAL_MS,
80
+ MAX_DYNAMIC_ROUTES,
81
+ MAX_QUERY_LIMIT,
82
+ MAX_USAGE_BUCKETS,
83
+ METRIC_ATTRIBUTES_MAX_DEPTH,
84
+ METRIC_ATTRIBUTES_MAX_SERIALIZED_CHARACTERS,
85
+ METRIC_BATCH_MAX_OBSERVATIONS,
86
+ METRIC_IDENTITY_MAX_CHARACTERS,
87
+ MILLISECONDS_PER_DAY,
88
+ MILLISECONDS_PER_HOUR,
89
+ MILLISECONDS_PER_MINUTE,
90
+ MILLISECONDS_PER_SECOND,
91
+ MODEL_AGGREGATE_MAX_GROUPS,
92
+ MODEL_AGGREGATE_MAX_ROWS,
93
+ MODEL_CATALOG_DEFAULT_QUERY_LIMIT,
94
+ MODEL_CATALOG_FRESHNESS_MS,
95
+ MODEL_CATALOG_MAX_ENTRIES,
96
+ MODEL_CATALOG_MAX_QUERY_LIMIT,
97
+ MODEL_CATALOG_MAX_RESPONSE_BYTES,
98
+ MODEL_CATALOG_REQUEST_TIMEOUT_MS,
99
+ MODEL_CATALOG_STORE_QUERY_LIMIT,
100
+ MODEL_OBSERVATION_FRESH_MS,
101
+ MODEL_OBSERVATION_IDENTITY_MAX_CHARACTERS,
102
+ MODEL_RANKING_DEFAULT_CONTEXT_WEIGHT,
103
+ MODEL_RANKING_DEFAULT_COST_WEIGHT,
104
+ MODEL_RANKING_DEFAULT_LATENCY_WEIGHT,
105
+ MODEL_RANKING_DEFAULT_QUALITY_WEIGHT,
106
+ MODEL_RANKING_DEFAULT_RELIABILITY_WEIGHT,
107
+ MODEL_RANKING_MAX_SOURCES,
108
+ OTLP_EXPORT_BATCH_SIZE,
109
+ OTLP_EXPORT_INTERVAL_MS,
110
+ OTLP_EXPORT_MAX_QUEUE_SIZE,
111
+ OTLP_EXPORT_MAX_RETRIES,
112
+ OTLP_EXPORT_TIMEOUT_MS,
113
+ PAPYRUS_CONTEXT_INJECTION_CHANNEL,
114
+ PAPYRUS_CONTEXT_INJECTION_SCHEMA,
115
+ PAPYRUS_TASK_FOCUS_CHANNEL,
116
+ PAPYRUS_TASK_FOCUS_SCHEMA,
117
+ PI_USAGE_IMPORT_MAX_DURATION_MS,
118
+ PI_USAGE_IMPORT_MAX_ENTRIES,
119
+ PI_USAGE_IMPORT_MAX_FILE_BYTES,
120
+ PI_USAGE_IMPORT_MAX_FILES,
121
+ PI_USAGE_IMPORT_MAX_RECORDS,
122
+ PI_USAGE_IMPORT_MAX_TOTAL_BYTES,
123
+ PRUNE_MIN_AGE_MS,
124
+ ROUTER_MAX_SESSION_SCOPES,
125
+ ROUTER_SESSION_ID_MAX_CHARACTERS,
126
+ SERVICE_MAX_BODY_BYTES,
127
+ SERVICE_MAX_RESPONSE_BYTES,
128
+ SESSION_IDENTITY_MAX_ROWS,
129
+ SQLITE_BUSY_TIMEOUT_MS,
130
+ SYSTEMD_UNIT_NAME,
131
+ TASK_COST_QUERY_LIMIT,
132
+ TASK_FOCUS_EVENT_MAX_AGE_MS,
133
+ TASK_FOCUS_ID_MAX_LENGTH,
134
+ TELEMETRY_POLL_INTERVAL_MS,
135
+ TELEMETRY_STALE_AFTER_MS,
136
+ TOKEN_FILENAME,
137
+ USAGE_AGGREGATE_MAX_ROWS,
138
+ USAGE_CHART_HEIGHT,
139
+ USAGE_MAX_DISTINCT_SCOPES,
140
+ USAGE_PER_SCOPE_QUERY_LIMIT,
141
+ USAGE_RENDER_MAX_SERIES,
142
+ USAGE_Y_AXIS_WIDTH,
143
+ } from "./constants.ts";
10
144
  export {
11
145
  classifyGoogleVertexFailure,
12
146
  type GoogleVertexFailure,
@@ -1,3 +1,51 @@
1
1
  /** One capability module's contribution to the operation dispatch table: a bounded set of operation names, each backed by a handler that only needs the collaborators its own factory was given. */
2
2
  export type OperationHandler = (input: Record<string, unknown>) => unknown | Promise<unknown>;
3
3
  export type OperationHandlerMap = Partial<Record<string, OperationHandler>>;
4
+
5
+ /**
6
+ * The full, exhaustive operation surface -- shared by service.ts (dispatch/typed execute) and
7
+ * registration.ts (Vehicle projection) so neither module needs to import the other for this type.
8
+ * Living here (not in either module) is what breaks the service.ts<->registration.ts circular
9
+ * dependency: previously registration.ts `import type`-ed OperationName back from service.ts,
10
+ * while service.ts value-imported registerJittorVehicleOperations from registration.ts.
11
+ */
12
+ export const EXPECTED_OPERATION_NAMES = [
13
+ "metrics.record",
14
+ "metrics.record_batch",
15
+ "metrics.query",
16
+ "metrics.distinct_scopes",
17
+ "metrics.usage_series",
18
+ "metrics.cost_by_task",
19
+ "metrics.prune",
20
+ "benchmark.refresh",
21
+ "benchmark.status",
22
+ "benchmark.query",
23
+ "catalog.refresh",
24
+ "catalog.status",
25
+ "catalog.query",
26
+ "usage.import",
27
+ "usage.import_status",
28
+ "usage.import_cancel",
29
+ "export.status",
30
+ "export.flush",
31
+ "session.register",
32
+ "session.release",
33
+ "models.rank",
34
+ "context.assess",
35
+ "context.delta",
36
+ "context.snapshot",
37
+ "compaction.estimate",
38
+ "service.checkpoint",
39
+ "telemetry.poll",
40
+ "router.status",
41
+ "router.decide",
42
+ "router.pause",
43
+ "router.resume",
44
+ "router.override",
45
+ "router.clear_override",
46
+ "router.current_route",
47
+ "router.available_routes",
48
+ "cache.economics",
49
+ ] as const;
50
+
51
+ export type OperationName = (typeof EXPECTED_OPERATION_NAMES)[number];
@@ -26,8 +26,7 @@ import type { VehicleEffect, VehicleIdempotency } from "@danypops/vehicle-core";
26
26
  import { bindVehicleOperation, defineErrorMapping, defineVehicleOperation, passthroughVehicleSchema } from "@danypops/vehicle-core";
27
27
  import type { VehicleRegistry } from "@danypops/vehicle-server";
28
28
  import { InvalidSessionSecretError } from "../sessions/identity.ts";
29
- import type { OperationHandlerMap } from "./operation-types.ts";
30
- import type { OperationName } from "./service.ts";
29
+ import type { OperationHandlerMap, OperationName } from "./operation-types.ts";
31
30
 
32
31
  /** Preserves the legacy route's 403 for invalid session credentials; every other rejection remains validation. */
33
32
  const withJittorErrorParity = defineErrorMapping([
@@ -34,52 +34,14 @@ import { contextOperations } from "./context-operations.ts";
34
34
  import { exportOperations } from "./export-operations.ts";
35
35
  import { metricsOperations } from "./metric-operations.ts";
36
36
  import { modelRankingOperations } from "./model-ranking-operations.ts";
37
- import type { OperationHandlerMap } from "./operation-types.ts";
37
+ import { EXPECTED_OPERATION_NAMES, type OperationHandlerMap, type OperationName } from "./operation-types.ts";
38
38
  import { registerJittorVehicleOperations } from "./registration.ts";
39
39
  import { routerOperations } from "./routing-operations.ts";
40
40
  import { sessionIdentityOperations } from "./session-operations.ts";
41
41
  import { usageImportOperations } from "./usage-import-operations.ts";
42
42
 
43
- export const EXPECTED_OPERATION_NAMES = [
44
- "metrics.record",
45
- "metrics.record_batch",
46
- "metrics.query",
47
- "metrics.distinct_scopes",
48
- "metrics.usage_series",
49
- "metrics.cost_by_task",
50
- "metrics.prune",
51
- "benchmark.refresh",
52
- "benchmark.status",
53
- "benchmark.query",
54
- "catalog.refresh",
55
- "catalog.status",
56
- "catalog.query",
57
- "usage.import",
58
- "usage.import_status",
59
- "usage.import_cancel",
60
- "export.status",
61
- "export.flush",
62
- "session.register",
63
- "session.release",
64
- "models.rank",
65
- "context.assess",
66
- "context.delta",
67
- "context.snapshot",
68
- "compaction.estimate",
69
- "service.checkpoint",
70
- "telemetry.poll",
71
- "router.status",
72
- "router.decide",
73
- "router.pause",
74
- "router.resume",
75
- "router.override",
76
- "router.clear_override",
77
- "router.current_route",
78
- "router.available_routes",
79
- "cache.economics",
80
- ] as const;
43
+ export { EXPECTED_OPERATION_NAMES, type OperationName };
81
44
 
82
- export type OperationName = (typeof EXPECTED_OPERATION_NAMES)[number];
83
45
  interface RouterScopeInput {
84
46
  session_id?: string;
85
47
  session_secret?: string;