@horizon36596/zenith-cli 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.
Files changed (104) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +18 -0
  3. package/README.md +207 -0
  4. package/dist/autoLoad.d.ts +54 -0
  5. package/dist/autoLoad.d.ts.map +1 -0
  6. package/dist/autoLoad.js +139 -0
  7. package/dist/autoLoad.js.map +1 -0
  8. package/dist/calibrateFit.d.ts +38 -0
  9. package/dist/calibrateFit.d.ts.map +1 -0
  10. package/dist/calibrateFit.js +69 -0
  11. package/dist/calibrateFit.js.map +1 -0
  12. package/dist/commandLibrary.d.ts +19 -0
  13. package/dist/commandLibrary.d.ts.map +1 -0
  14. package/dist/commandLibrary.js +27 -0
  15. package/dist/commandLibrary.js.map +1 -0
  16. package/dist/commands/calibrate.d.ts +18 -0
  17. package/dist/commands/calibrate.d.ts.map +1 -0
  18. package/dist/commands/calibrate.js +116 -0
  19. package/dist/commands/calibrate.js.map +1 -0
  20. package/dist/commands/codegen.d.ts +12 -0
  21. package/dist/commands/codegen.d.ts.map +1 -0
  22. package/dist/commands/codegen.js +63 -0
  23. package/dist/commands/codegen.js.map +1 -0
  24. package/dist/commands/deploy.d.ts +63 -0
  25. package/dist/commands/deploy.d.ts.map +1 -0
  26. package/dist/commands/deploy.js +181 -0
  27. package/dist/commands/deploy.js.map +1 -0
  28. package/dist/commands/diff.d.ts +11 -0
  29. package/dist/commands/diff.d.ts.map +1 -0
  30. package/dist/commands/diff.js +68 -0
  31. package/dist/commands/diff.js.map +1 -0
  32. package/dist/commands/estimate.d.ts +9 -0
  33. package/dist/commands/estimate.d.ts.map +1 -0
  34. package/dist/commands/estimate.js +81 -0
  35. package/dist/commands/estimate.js.map +1 -0
  36. package/dist/commands/init.d.ts +10 -0
  37. package/dist/commands/init.d.ts.map +1 -0
  38. package/dist/commands/init.js +67 -0
  39. package/dist/commands/init.js.map +1 -0
  40. package/dist/commands/new.d.ts +10 -0
  41. package/dist/commands/new.d.ts.map +1 -0
  42. package/dist/commands/new.js +28 -0
  43. package/dist/commands/new.js.map +1 -0
  44. package/dist/commands/propose.d.ts +15 -0
  45. package/dist/commands/propose.d.ts.map +1 -0
  46. package/dist/commands/propose.js +67 -0
  47. package/dist/commands/propose.js.map +1 -0
  48. package/dist/commands/render.d.ts +16 -0
  49. package/dist/commands/render.d.ts.map +1 -0
  50. package/dist/commands/render.js +90 -0
  51. package/dist/commands/render.js.map +1 -0
  52. package/dist/commands/sim.d.ts +31 -0
  53. package/dist/commands/sim.d.ts.map +1 -0
  54. package/dist/commands/sim.js +213 -0
  55. package/dist/commands/sim.js.map +1 -0
  56. package/dist/commands/validate.d.ts +19 -0
  57. package/dist/commands/validate.d.ts.map +1 -0
  58. package/dist/commands/validate.js +97 -0
  59. package/dist/commands/validate.js.map +1 -0
  60. package/dist/coreGate.d.ts +19 -0
  61. package/dist/coreGate.d.ts.map +1 -0
  62. package/dist/coreGate.js +23 -0
  63. package/dist/coreGate.js.map +1 -0
  64. package/dist/fieldImage.d.ts +19 -0
  65. package/dist/fieldImage.d.ts.map +1 -0
  66. package/dist/fieldImage.js +63 -0
  67. package/dist/fieldImage.js.map +1 -0
  68. package/dist/findings.d.ts +20 -0
  69. package/dist/findings.d.ts.map +1 -0
  70. package/dist/findings.js +57 -0
  71. package/dist/findings.js.map +1 -0
  72. package/dist/index.d.ts +32 -0
  73. package/dist/index.d.ts.map +1 -0
  74. package/dist/index.js +194 -0
  75. package/dist/index.js.map +1 -0
  76. package/dist/javaCodegen.d.ts +44 -0
  77. package/dist/javaCodegen.d.ts.map +1 -0
  78. package/dist/javaCodegen.js +537 -0
  79. package/dist/javaCodegen.js.map +1 -0
  80. package/dist/launcher.d.ts +39 -0
  81. package/dist/launcher.d.ts.map +1 -0
  82. package/dist/launcher.js +153 -0
  83. package/dist/launcher.js.map +1 -0
  84. package/dist/lib.d.ts +13 -0
  85. package/dist/lib.d.ts.map +1 -0
  86. package/dist/lib.js +13 -0
  87. package/dist/lib.js.map +1 -0
  88. package/dist/project.d.ts +33 -0
  89. package/dist/project.d.ts.map +1 -0
  90. package/dist/project.js +104 -0
  91. package/dist/project.js.map +1 -0
  92. package/dist/skeletons.d.ts +16 -0
  93. package/dist/skeletons.d.ts.map +1 -0
  94. package/dist/skeletons.js +120 -0
  95. package/dist/skeletons.js.map +1 -0
  96. package/dist/traceReport.d.ts +75 -0
  97. package/dist/traceReport.d.ts.map +1 -0
  98. package/dist/traceReport.js +91 -0
  99. package/dist/traceReport.js.map +1 -0
  100. package/dist/version.d.ts +3 -0
  101. package/dist/version.d.ts.map +1 -0
  102. package/dist/version.js +4 -0
  103. package/dist/version.js.map +1 -0
  104. package/package.json +71 -0
@@ -0,0 +1,91 @@
1
+ import { distance, flattenSteps } from "@horizon36596/zenith-core";
2
+ function isObject(value) {
3
+ return typeof value === "object" && value !== null && !Array.isArray(value);
4
+ }
5
+ export class TraceParseError extends Error {
6
+ }
7
+ /** Parses and shape-checks a trace file, without assuming fields later sim batches have not filled. */
8
+ export function parseTrace(json) {
9
+ if (!isObject(json))
10
+ throw new TraceParseError("the trace file is not a JSON object");
11
+ const auto = json.auto;
12
+ const steps = json.steps;
13
+ const poses = json.poses;
14
+ if (typeof auto !== "string" || !Array.isArray(steps) || !Array.isArray(poses)) {
15
+ throw new TraceParseError('the trace file is missing "auto", "steps" or "poses"');
16
+ }
17
+ return {
18
+ formatVersion: typeof json.formatVersion === "number" ? json.formatVersion : 1,
19
+ auto,
20
+ simTimeS: typeof json.simTimeS === "number" ? json.simTimeS : 0,
21
+ tickS: typeof json.tickS === "number" ? json.tickS : 0.02,
22
+ capabilities: Array.isArray(json.capabilities) ? json.capabilities.map(String) : [],
23
+ steps: steps,
24
+ poses: poses,
25
+ truthPoses: Array.isArray(json.truthPoses) ? json.truthPoses : [],
26
+ structureContacts: Array.isArray(json.structureContacts)
27
+ ? json.structureContacts
28
+ : [],
29
+ ledger: Array.isArray(json.ledger) ? json.ledger : [],
30
+ events: Array.isArray(json.events) ? json.events : [],
31
+ };
32
+ }
33
+ const KNOWN_CAPABILITIES = ["structureContacts", "ledger"];
34
+ /** Builds the estimate-vs-actual report `zenith sim` prints, from a trace and the auto's plan. */
35
+ export function buildSimReport(trace, plan, estimateResult) {
36
+ const planSteps = flattenSteps(plan.steps);
37
+ const estimateById = new Map((estimateResult?.steps ?? []).map((step) => [step.stepId, step]));
38
+ const steps = trace.steps.map((traceStep) => {
39
+ const actualS = traceStep.endS - traceStep.startS;
40
+ const stepEstimate = estimateById.get(traceStep.id) ?? null;
41
+ const nominalS = stepEstimate?.nominalS ?? null;
42
+ const planStep = planSteps.find((candidate) => candidate.id === traceStep.id);
43
+ let maxCrossTrackIn = null;
44
+ if (planStep !== undefined && planStep.samples.length > 0) {
45
+ const posesInWindow = trace.poses.filter((row) => row[0] >= traceStep.startS && row[0] <= traceStep.endS);
46
+ if (posesInWindow.length > 0) {
47
+ maxCrossTrackIn = 0;
48
+ for (const row of posesInWindow) {
49
+ const point = { xIn: row[1], yIn: row[2] };
50
+ let nearest = Number.POSITIVE_INFINITY;
51
+ for (const sample of planStep.samples) {
52
+ const d = distance(point, sample.pose);
53
+ if (d < nearest)
54
+ nearest = d;
55
+ }
56
+ if (nearest > maxCrossTrackIn)
57
+ maxCrossTrackIn = nearest;
58
+ }
59
+ }
60
+ }
61
+ return {
62
+ id: traceStep.id,
63
+ estimateNominalS: nominalS,
64
+ actualS,
65
+ deltaS: nominalS === null ? null : actualS - nominalS,
66
+ interrupted: traceStep.interrupted,
67
+ maxCrossTrackIn,
68
+ };
69
+ });
70
+ const lastLedger = trace.ledger[trace.ledger.length - 1];
71
+ const launches = trace.ledger.reduce((sum, row) => sum + (row.launches ?? 0), 0);
72
+ const tips = {};
73
+ for (const row of trace.ledger) {
74
+ for (const [alliance, count] of Object.entries(row.tips ?? {}))
75
+ tips[alliance] = count;
76
+ }
77
+ return {
78
+ auto: trace.auto,
79
+ simTimeS: trace.simTimeS,
80
+ steps,
81
+ totalEstimateS: estimateResult?.nominalS ?? null,
82
+ totalActualS: trace.steps.reduce((sum, step) => sum + (step.endS - step.startS), 0),
83
+ structureContacts: trace.structureContacts.length,
84
+ launches,
85
+ tips,
86
+ heldAtEnd: lastLedger?.held ?? null,
87
+ capabilities: trace.capabilities,
88
+ inert: KNOWN_CAPABILITIES.filter((capability) => !trace.capabilities.includes(capability)),
89
+ };
90
+ }
91
+ //# sourceMappingURL=traceReport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traceReport.js","sourceRoot":"","sources":["../src/traceReport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** The Zenith release this CLI belongs to. */
2
+ export declare const VERSION = "0.1.1";
3
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AACA,8CAA8C;AAC9C,eAAO,MAAM,OAAO,UAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Written by scripts/stamp-version.mjs from the root package.json; do not edit by hand.
2
+ /** The Zenith release this CLI belongs to. */
3
+ export const VERSION = "0.1.1";
4
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,8CAA8C;AAC9C,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
package/package.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "@horizon36596/zenith-cli",
3
+ "version": "0.1.1",
4
+ "description": "The zenith command: validate, estimate, render, codegen, deploy and simulate FTC autonomous routines.",
5
+ "keywords": [
6
+ "ftc",
7
+ "first-tech-challenge",
8
+ "robotics",
9
+ "autonomous",
10
+ "zenith",
11
+ "cli",
12
+ "codegen",
13
+ "pedro-pathing",
14
+ "solverslib"
15
+ ],
16
+ "homepage": "https://libraries.horizon36596.org/zenith/",
17
+ "bugs": {
18
+ "url": "https://github.com/Horizon-36596/zenith/issues"
19
+ },
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/Horizon-36596/zenith.git",
23
+ "directory": "packages/cli"
24
+ },
25
+ "license": "MIT",
26
+ "author": "Horizon (FTC 36596)",
27
+ "type": "module",
28
+ "main": "./dist/index.js",
29
+ "types": "./dist/index.d.ts",
30
+ "bin": {
31
+ "zenith": "./dist/index.js"
32
+ },
33
+ "exports": {
34
+ ".": {
35
+ "types": "./dist/index.d.ts",
36
+ "default": "./dist/index.js"
37
+ },
38
+ "./lib": {
39
+ "types": "./dist/lib.d.ts",
40
+ "default": "./dist/lib.js"
41
+ }
42
+ },
43
+ "files": [
44
+ "dist",
45
+ "!dist/**/*.test.*",
46
+ "!dist/**/*.qa.test.*",
47
+ "!dist/**/testSupport.*",
48
+ "!dist/**/*.tsbuildinfo",
49
+ "!dist/testing",
50
+ "!dist/**/testing.*",
51
+ "README.md",
52
+ "LICENSE",
53
+ "NOTICE"
54
+ ],
55
+ "engines": {
56
+ "node": ">=22"
57
+ },
58
+ "publishConfig": {
59
+ "access": "public",
60
+ "provenance": true
61
+ },
62
+ "dependencies": {
63
+ "@resvg/resvg-js": "^2.6.2",
64
+ "commander": "^13.1.0",
65
+ "@horizon36596/zenith-core": "0.1.1",
66
+ "@horizon36596/zenith-season-biobuzz": "0.1.1",
67
+ "@horizon36596/zenith-seasons": "0.1.1",
68
+ "@horizon36596/zenith-schema": "0.1.1"
69
+ },
70
+ "scripts": {}
71
+ }