openc3 7.4.1 → 7.5.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 (99) hide show
  1. checksums.yaml +4 -4
  2. data/bin/pipinstall +18 -5
  3. data/bin/pipuninstall +1 -1
  4. data/bin/uvinstall +36 -8
  5. data/data/config/default_plugins.yaml +43 -0
  6. data/data/config/interface_modifiers.yaml +22 -7
  7. data/data/config/item_modifiers.yaml +14 -4
  8. data/data/config/plugins.yaml +1 -1
  9. data/data/config/widgets.yaml +1 -1
  10. data/lib/openc3/api/cmd_api.rb +10 -13
  11. data/lib/openc3/api/interface_api.rb +1 -2
  12. data/lib/openc3/api/limits_api.rb +149 -160
  13. data/lib/openc3/api/metrics_api.rb +26 -1
  14. data/lib/openc3/api/router_api.rb +1 -2
  15. data/lib/openc3/api/tlm_api.rb +225 -71
  16. data/lib/openc3/config/config_parser.rb +3 -1
  17. data/lib/openc3/core_ext/tempfile.rb +2 -0
  18. data/lib/openc3/interfaces/file_interface.rb +6 -1
  19. data/lib/openc3/interfaces/http_client_interface.rb +14 -6
  20. data/lib/openc3/interfaces/interface.rb +27 -3
  21. data/lib/openc3/interfaces/read_queue_interface.rb +331 -0
  22. data/lib/openc3/interfaces/stream_interface.rb +22 -3
  23. data/lib/openc3/interfaces/tcpip_server_interface.rb +13 -0
  24. data/lib/openc3/interfaces/udp_interface.rb +16 -2
  25. data/lib/openc3/interfaces.rb +1 -0
  26. data/lib/openc3/logs/log_writer.rb +14 -4
  27. data/lib/openc3/microservices/decom_microservice.rb +30 -5
  28. data/lib/openc3/microservices/interface_decom_common.rb +3 -1
  29. data/lib/openc3/microservices/interface_microservice.rb +146 -50
  30. data/lib/openc3/microservices/log_microservice.rb +1 -3
  31. data/lib/openc3/microservices/microservice.rb +25 -1
  32. data/lib/openc3/microservices/plugin_microservice.rb +32 -0
  33. data/lib/openc3/microservices/text_log_microservice.rb +1 -3
  34. data/lib/openc3/models/cvt_model.rb +7 -2
  35. data/lib/openc3/models/interface_model.rb +1 -1
  36. data/lib/openc3/models/interface_status_model.rb +6 -0
  37. data/lib/openc3/models/metric_model.rb +52 -4
  38. data/lib/openc3/models/microservice_model.rb +7 -3
  39. data/lib/openc3/models/plugin_model.rb +12 -12
  40. data/lib/openc3/models/python_package_model.rb +3 -13
  41. data/lib/openc3/models/target_model.rb +92 -15
  42. data/lib/openc3/operators/microservice_operator.rb +5 -0
  43. data/lib/openc3/operators/operator.rb +69 -0
  44. data/lib/openc3/packets/packet.rb +10 -4
  45. data/lib/openc3/packets/packet_config.rb +12 -1
  46. data/lib/openc3/packets/packet_item.rb +40 -22
  47. data/lib/openc3/packets/parsers/state_parser.rb +1 -1
  48. data/lib/openc3/packets/structure_item.rb +3 -2
  49. data/lib/openc3/script/api_shared.rb +62 -86
  50. data/lib/openc3/script/extract.rb +263 -20
  51. data/lib/openc3/script/plugins.rb +4 -11
  52. data/lib/openc3/script/script.rb +1 -1
  53. data/lib/openc3/script/storage.rb +81 -10
  54. data/lib/openc3/system/system.rb +9 -6
  55. data/lib/openc3/topics/command_decom_topic.rb +1 -1
  56. data/lib/openc3/topics/command_topic.rb +2 -1
  57. data/lib/openc3/topics/limits_event_topic.rb +90 -3
  58. data/lib/openc3/topics/router_topic.rb +7 -2
  59. data/lib/openc3/topics/system_events_topic.rb +9 -6
  60. data/lib/openc3/topics/telemetry_decom_topic.rb +1 -1
  61. data/lib/openc3/topics/telemetry_topic.rb +3 -2
  62. data/lib/openc3/topics/topic.rb +162 -3
  63. data/lib/openc3/utilities/bucket.rb +5 -0
  64. data/lib/openc3/utilities/cli_generator.rb +67 -15
  65. data/lib/openc3/utilities/config_overlay.rb +35 -17
  66. data/lib/openc3/utilities/default_plugins.rb +33 -0
  67. data/lib/openc3/utilities/local_mode.rb +82 -46
  68. data/lib/openc3/utilities/metric.rb +16 -0
  69. data/lib/openc3/utilities/process_stats.rb +160 -0
  70. data/lib/openc3/utilities/pypi_url.rb +65 -0
  71. data/lib/openc3/utilities/questdb_client.rb +140 -32
  72. data/lib/openc3/utilities/running_script.rb +22 -18
  73. data/lib/openc3/utilities/secrets.rb +5 -0
  74. data/lib/openc3/utilities/store_autoload.rb +23 -4
  75. data/lib/openc3/utilities/store_queued.rb +37 -9
  76. data/lib/openc3/utilities/target_file.rb +57 -12
  77. data/lib/openc3/utilities/topic_lag_monitor.rb +193 -0
  78. data/lib/openc3/version.rb +5 -5
  79. data/templates/conversion/conversion.py +6 -2
  80. data/templates/conversion/conversion.rb +5 -0
  81. data/templates/plugin/.github/workflows/playwright.yml +62 -0
  82. data/templates/plugin/.github/workflows/release.yml +45 -0
  83. data/templates/plugin/.github/workflows/unit-tests.yml +35 -0
  84. data/templates/plugin/.gitignore +6 -0
  85. data/templates/plugin/README.md +114 -2
  86. data/templates/plugin/lib/PACKAGE/__init__.py +4 -0
  87. data/templates/plugin/plugin.gemspec +10 -1
  88. data/templates/plugin/pyproject.toml +119 -0
  89. data/templates/tool_angular/package.json +2 -2
  90. data/templates/tool_angular/pnpm-workspace.yaml +16 -0
  91. data/templates/tool_react/package.json +1 -1
  92. data/templates/tool_react/pnpm-workspace.yaml +16 -0
  93. data/templates/tool_svelte/package.json +2 -1
  94. data/templates/tool_svelte/pnpm-workspace.yaml +20 -0
  95. data/templates/tool_vue/package.json +3 -3
  96. data/templates/tool_vue/pnpm-workspace.yaml +16 -0
  97. data/templates/widget/package.json +2 -2
  98. data/templates/widget/pnpm-workspace.yaml +16 -0
  99. metadata +16 -1
@@ -20,7 +20,16 @@ Gem::Specification.new do |s|
20
20
  time = Time.now.strftime("%Y%m%d%H%M%S")
21
21
  s.version = '0.0.0' + ".#{time}"
22
22
  end
23
- s.files = Dir.glob("{targets,lib,public,tools,microservices}/**/*") + %w(Rakefile README.md LICENSE.md plugin.txt)
23
+ <% if @@language == 'py' -%>
24
+ # pyproject.toml and uv.lock must be in the gem for COSMOS to install the
25
+ # plugin's python dependencies: install only sees files the gem contains.
26
+ # Globbed rather than listed so the gem still builds before `uv lock` is run.
27
+ <% end -%>
28
+ s.files = Dir.glob("{targets,lib,public,tools,microservices}/**/*") + %w(Rakefile README.md LICENSE.md plugin.txt)<% if @@language == 'py' %> + Dir.glob("{pyproject.toml,uv.lock}")<% end %>
29
+ <% if @@language == 'py' -%>
30
+ # Running tests or scripts locally writes bytecode next to the source; keep it out of the gem.
31
+ s.files = s.files.reject { |file| file.include?('__pycache__') }
32
+ <% end -%>
24
33
 
25
34
  s.metadata = {
26
35
  # These fields are used when you submit your plugin to the OpenC3 Store at store.openc3.com
@@ -0,0 +1,119 @@
1
+ [project]
2
+ name = "<%= plugin_name %>"
3
+ version = "0.0.0"
4
+ description = "OpenC3 <%= plugin_name %> plugin Python dependencies"
5
+ readme = "README.md"
6
+ requires-python = ">=3.11"
7
+ # Add your plugin's Python dependencies here, then run `uv lock` and commit the
8
+ # resulting uv.lock so COSMOS installs the same versions every time.
9
+ dependencies = []
10
+
11
+ [dependency-groups]
12
+ # Development and test only. COSMOS installs plugin dependencies with --no-dev,
13
+ # so nothing here reaches a deployed plugin. Left unpinned on purpose: a bound
14
+ # written into this template would still be here whenever you generated this
15
+ # plugin, holding you on stale tooling. Commit the uv.lock for reproducible
16
+ # versions, and add a pin here only if you need a specific one.
17
+ dev = [
18
+ "openc3",
19
+ "pytest",
20
+ "ruff",
21
+ "ty",
22
+ ]
23
+
24
+ [tool.uv]
25
+ # This file declares dependencies only — it is not a buildable package. COSMOS
26
+ # loads plugin code from lib/ at runtime and installs with `uv sync --frozen`,
27
+ # so nothing here is ever built and no [build-system] is needed.
28
+ package = false
29
+
30
+ # Keep the dev group out of a plain `uv sync` so a local install matches what
31
+ # COSMOS installs (it passes --no-dev). Use `uv sync --group dev` while
32
+ # developing, or `uv run --group dev pytest`.
33
+ default-groups = []
34
+
35
+ # Uncomment to install dependencies from a private PyPI repository.
36
+ # See: https://docs.astral.sh/uv/configuration/indexes/
37
+ #
38
+ # These settings are used whenever uv resolves: when you run `uv lock` yourself,
39
+ # and at install time when no uv.lock is committed alongside this file.
40
+ #
41
+ # They do not always survive installation into COSMOS. When the PyPI URL in
42
+ # Admin Console -> Settings names anything other than public PyPI, the operator
43
+ # has designated an index and COSMOS makes it authoritative: the install passes
44
+ # uv `--no-config --no-sources`, so everything below is ignored and every
45
+ # package is resolved from the operator's index. A dependency published only to
46
+ # your private index then fails to install there, rather than being fetched
47
+ # from it — coordinate with the operator so their index serves it too.
48
+ #
49
+ # A committed uv.lock sidesteps this entirely: COSMOS installs with
50
+ # `uv sync --frozen`, which fetches the exact registry and wheel URLs recorded
51
+ # in the lock and consults no index at all.
52
+ #
53
+ # Indexes are searched in the order listed, before the default index. Mark one
54
+ # `default = true` to replace public PyPI entirely, or list your private repo
55
+ # first and leave PyPI as the default to fall back to it.
56
+ #
57
+ # index = [
58
+ # { name = "private", url = "https://private-pypi.example.com/simple" },
59
+ # { name = "pypi", url = "https://pypi.org/simple", default = true },
60
+ # ]
61
+ #
62
+ # Pin internal packages to a specific index. A pin keeps a same-named package on
63
+ # public PyPI from being substituted. Add `explicit = true` to an index to keep
64
+ # it from serving anything other than packages pinned to it.
65
+ #
66
+ # sources = { my-internal-pkg = { index = "private" } }
67
+ #
68
+ # Uncomment for self-signed certificates.
69
+ #
70
+ # allow-insecure-host = ["private-pypi.example.com"]
71
+
72
+ [tool.ty.environment]
73
+ # COSMOS puts the plugin's lib/ on sys.path at runtime rather than installing it,
74
+ # so ty needs it here to resolve imports between the plugin's own modules.
75
+ extra-paths = ["lib"]
76
+
77
+ [tool.pytest.ini_options]
78
+ # Same reason as ty's extra-paths: lib/ is on sys.path at runtime, not installed,
79
+ # so tests need it on the path to import the plugin's own modules.
80
+ pythonpath = ["lib"]
81
+
82
+ [tool.ty.rules]
83
+ # These are artifacts of how COSMOS ships its Python API, not mistakes in your
84
+ # plugin, so they are off rather than "warn": ty exits non-zero on a warning, so
85
+ # "warn" would fail the check just as an error does. Delete a line to opt back
86
+ # in, or silence a single case with `# ty: ignore[rule-name]`.
87
+ #
88
+ # openc3.script re-exports its API through star imports (from .telemetry import *,
89
+ # etc.) with no __all__, so ty cannot see tlm, cmd, send_raw and friends even
90
+ # though they resolve at runtime. unresolved-reference covers using such a name,
91
+ # unresolved-import covers importing one by name. Ruff's F405 flags the same
92
+ # thing if you want it reported.
93
+ unresolved-reference = "ignore"
94
+ unresolved-import = "ignore"
95
+ # Script Runner replaces openc3.script.start() at runtime with its own
96
+ # implementation, which accepts bind_variables. The pip package only ships the
97
+ # stub signature start(procedure_name).
98
+ unknown-argument = "ignore"
99
+
100
+ [tool.ruff]
101
+ line-length = 120
102
+ # target-version is intentionally absent: ruff infers it from the project's
103
+ # requires-python above, so there is one place to bump the minimum. ty does the
104
+ # same, which is why [tool.ty.environment] sets no python-version either.
105
+
106
+ [tool.ruff.lint]
107
+ select = ["E", "F", "I", "N", "UP", "B", "W", "C4", "SIM"]
108
+ ignore = [
109
+ "E402", # Module level import not at top of file
110
+ "E501", # Line too long (handled by the formatter)
111
+ "F402", # Import shadowed by loop var
112
+ "F403", # Star imports used - the documented way to import the COSMOS API
113
+ "F405", # Name may be undefined due to star import
114
+ "N815", # Mixed case variable in class scope
115
+ ]
116
+
117
+ [tool.ruff.lint.isort]
118
+ known-first-party = ["openc3"]
119
+ lines-after-imports = 2
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "<%= tool_name %>",
3
- "version": "7.4.1",
3
+ "version": "7.5.1",
4
4
  "scripts": {
5
5
  "ng": "ng",
6
6
  "start": "ng serve",
@@ -23,7 +23,7 @@
23
23
  "@angular/platform-browser-dynamic": "^18.2.6",
24
24
  "@angular/router": "^18.2.6",
25
25
  "@astrouxds/astro-web-components": "^7.24.0",
26
- "@openc3/js-common": "7.4.1",
26
+ "@openc3/js-common": "7.5.1",
27
27
  "rxjs": "~7.8.0",
28
28
  "single-spa": "^5.9.5",
29
29
  "single-spa-angular": "^9.2.0",
@@ -0,0 +1,16 @@
1
+ # Copyright 2026 OpenC3, Inc.
2
+ # All Rights Reserved.
3
+ #
4
+ # This program is distributed in the hope that it will be useful,
5
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
6
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7
+ # See LICENSE.md for more details.
8
+ #
9
+ # This file may also be used under the terms of a commercial license
10
+ # if purchased from OpenC3, Inc.
11
+
12
+ minimumReleaseAge: 1440 # 1 day
13
+ minimumReleaseAgeExclude:
14
+ # we control these packages, so we don't need to wait to consume them
15
+ - '@openc3/js-common'
16
+ - '@openc3/vue-common'
@@ -16,7 +16,7 @@
16
16
  "@emotion/react": "^11.13.3",
17
17
  "@emotion/styled": "^11.11.0",
18
18
  "@mui/material": "^6.1.1",
19
- "@openc3/js-common": "7.4.1",
19
+ "@openc3/js-common": "7.5.1",
20
20
  "react": "^18.2.0",
21
21
  "react-dom": "^18.2.0",
22
22
  "single-spa-react": "^5.1.4"
@@ -0,0 +1,16 @@
1
+ # Copyright 2026 OpenC3, Inc.
2
+ # All Rights Reserved.
3
+ #
4
+ # This program is distributed in the hope that it will be useful,
5
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
6
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7
+ # See LICENSE.md for more details.
8
+ #
9
+ # This file may also be used under the terms of a commercial license
10
+ # if purchased from OpenC3, Inc.
11
+
12
+ minimumReleaseAge: 1440 # 1 day
13
+ minimumReleaseAgeExclude:
14
+ # we control these packages, so we don't need to wait to consume them
15
+ - '@openc3/js-common'
16
+ - '@openc3/vue-common'
@@ -12,7 +12,7 @@
12
12
  },
13
13
  "dependencies": {
14
14
  "@astrouxds/astro-web-components": "^7.24.0",
15
- "@openc3/js-common": "7.4.1",
15
+ "@openc3/js-common": "7.5.1",
16
16
  "@smui/button": "^7.0.0",
17
17
  "@smui/common": "^7.0.0",
18
18
  "@smui/card": "^7.0.0",
@@ -26,6 +26,7 @@
26
26
  "devDependencies": {
27
27
  "@babel/core": "^7.25.2",
28
28
  "@babel/preset-env": "^7.25.4",
29
+ "@material/theme": "^14.0.0",
29
30
  "@rollup/plugin-commonjs": "^28.0.0",
30
31
  "@rollup/plugin-node-resolve": "^15.3.0",
31
32
  "@testing-library/jest-dom": "^6.5.0",
@@ -0,0 +1,20 @@
1
+ # Copyright 2026 OpenC3, Inc.
2
+ # All Rights Reserved.
3
+ #
4
+ # This program is distributed in the hope that it will be useful,
5
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
6
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7
+ # See LICENSE.md for more details.
8
+ #
9
+ # This file may also be used under the terms of a commercial license
10
+ # if purchased from OpenC3, Inc.
11
+
12
+ # smui-theme builds its sass load path from require.resolve('@material/dom'),
13
+ # which only finds the sibling @material/* packages in a flat node_modules.
14
+ nodeLinker: hoisted
15
+
16
+ minimumReleaseAge: 1440 # 1 day
17
+ minimumReleaseAgeExclude:
18
+ # we control these packages, so we don't need to wait to consume them
19
+ - '@openc3/js-common'
20
+ - '@openc3/vue-common'
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "<%= tool_name %>",
3
- "version": "7.4.1",
3
+ "version": "7.5.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -11,8 +11,8 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "@astrouxds/astro-web-components": "^7.24.0",
14
- "@openc3/js-common": "7.4.1",
15
- "@openc3/vue-common": "7.4.1",
14
+ "@openc3/js-common": "7.5.1",
15
+ "@openc3/vue-common": "7.5.1",
16
16
  "axios": "^1.7.7",
17
17
  "date-fns": "^4.1.0",
18
18
  "lodash": "^4.17.21",
@@ -0,0 +1,16 @@
1
+ # Copyright 2026 OpenC3, Inc.
2
+ # All Rights Reserved.
3
+ #
4
+ # This program is distributed in the hope that it will be useful,
5
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
6
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7
+ # See LICENSE.md for more details.
8
+ #
9
+ # This file may also be used under the terms of a commercial license
10
+ # if purchased from OpenC3, Inc.
11
+
12
+ minimumReleaseAge: 1440 # 1 day
13
+ minimumReleaseAgeExclude:
14
+ # we control these packages, so we don't need to wait to consume them
15
+ - '@openc3/js-common'
16
+ - '@openc3/vue-common'
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "<%= widget_name %>",
3
- "version": "7.4.1",
3
+ "version": "7.5.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -8,7 +8,7 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "@astrouxds/astro-web-components": "^7.24.0",
11
- "@openc3/vue-common": "7.4.1",
11
+ "@openc3/vue-common": "7.5.1",
12
12
  "vuetify": "^3.7.1"
13
13
  },
14
14
  "devDependencies": {
@@ -0,0 +1,16 @@
1
+ # Copyright 2026 OpenC3, Inc.
2
+ # All Rights Reserved.
3
+ #
4
+ # This program is distributed in the hope that it will be useful,
5
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
6
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7
+ # See LICENSE.md for more details.
8
+ #
9
+ # This file may also be used under the terms of a commercial license
10
+ # if purchased from OpenC3, Inc.
11
+
12
+ minimumReleaseAge: 1440 # 1 day
13
+ minimumReleaseAgeExclude:
14
+ # we control these packages, so we don't need to wait to consume them
15
+ - '@openc3/js-common'
16
+ - '@openc3/vue-common'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openc3
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.4.1
4
+ version: 7.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Melton
@@ -953,6 +953,7 @@ files:
953
953
  - data/config/command_modifiers.yaml
954
954
  - data/config/command_telemetry.yaml
955
955
  - data/config/conversions.yaml
956
+ - data/config/default_plugins.yaml
956
957
  - data/config/graph_settings.yaml
957
958
  - data/config/interface_modifiers.yaml
958
959
  - data/config/item_modifiers.yaml
@@ -1094,6 +1095,7 @@ files:
1094
1095
  - lib/openc3/interfaces/protocols/slip_protocol.rb
1095
1096
  - lib/openc3/interfaces/protocols/template_protocol.rb
1096
1097
  - lib/openc3/interfaces/protocols/terminated_protocol.rb
1098
+ - lib/openc3/interfaces/read_queue_interface.rb
1097
1099
  - lib/openc3/interfaces/serial_interface.rb
1098
1100
  - lib/openc3/interfaces/simulated_target_interface.rb
1099
1101
  - lib/openc3/interfaces/stream_interface.rb
@@ -1300,6 +1302,7 @@ files:
1300
1302
  - lib/openc3/utilities/crc.rb
1301
1303
  - lib/openc3/utilities/csv.rb
1302
1304
  - lib/openc3/utilities/ctrf.rb
1305
+ - lib/openc3/utilities/default_plugins.rb
1303
1306
  - lib/openc3/utilities/env_helper.rb
1304
1307
  - lib/openc3/utilities/local_bucket.rb
1305
1308
  - lib/openc3/utilities/local_mode.rb
@@ -1309,6 +1312,7 @@ files:
1309
1312
  - lib/openc3/utilities/migration.rb
1310
1313
  - lib/openc3/utilities/open_telemetry.rb
1311
1314
  - lib/openc3/utilities/process_manager.rb
1315
+ - lib/openc3/utilities/process_stats.rb
1312
1316
  - lib/openc3/utilities/pypi_url.rb
1313
1317
  - lib/openc3/utilities/python_proxy.rb
1314
1318
  - lib/openc3/utilities/python_venv.rb
@@ -1330,6 +1334,7 @@ files:
1330
1334
  - lib/openc3/utilities/target_file.rb
1331
1335
  - lib/openc3/utilities/thread_manager.rb
1332
1336
  - lib/openc3/utilities/throttle.rb
1337
+ - lib/openc3/utilities/topic_lag_monitor.rb
1333
1338
  - lib/openc3/utilities/zip.rb
1334
1339
  - lib/openc3/version.rb
1335
1340
  - lib/openc3/win32/excel.rb
@@ -1345,12 +1350,17 @@ files:
1345
1350
  - templates/limits_response/response.rb
1346
1351
  - templates/microservice/microservices/TEMPLATE/microservice.py
1347
1352
  - templates/microservice/microservices/TEMPLATE/microservice.rb
1353
+ - templates/plugin/.github/workflows/playwright.yml
1354
+ - templates/plugin/.github/workflows/release.yml
1355
+ - templates/plugin/.github/workflows/unit-tests.yml
1348
1356
  - templates/plugin/.gitignore
1349
1357
  - templates/plugin/LICENSE.md
1350
1358
  - templates/plugin/README.md
1351
1359
  - templates/plugin/Rakefile
1360
+ - templates/plugin/lib/PACKAGE/__init__.py
1352
1361
  - templates/plugin/plugin.gemspec
1353
1362
  - templates/plugin/plugin.txt
1363
+ - templates/plugin/pyproject.toml
1354
1364
  - templates/processor/processor.py
1355
1365
  - templates/processor/processor.rb
1356
1366
  - templates/target/targets/TARGET/cmd_tlm/cmd.txt
@@ -1370,6 +1380,7 @@ files:
1370
1380
  - templates/tool_angular/angular.json
1371
1381
  - templates/tool_angular/extra-webpack.config.js
1372
1382
  - templates/tool_angular/package.json
1383
+ - templates/tool_angular/pnpm-workspace.yaml
1373
1384
  - templates/tool_angular/src/app/app-routing.module.ts
1374
1385
  - templates/tool_angular/src/app/app.component.html
1375
1386
  - templates/tool_angular/src/app/app.component.scss
@@ -1397,6 +1408,7 @@ files:
1397
1408
  - templates/tool_react/babel.config.json
1398
1409
  - templates/tool_react/jest.config.js
1399
1410
  - templates/tool_react/package.json
1411
+ - templates/tool_react/pnpm-workspace.yaml
1400
1412
  - templates/tool_react/src/openc3-tool_name.js
1401
1413
  - templates/tool_react/src/root.component.js
1402
1414
  - templates/tool_react/src/root.component.test.js
@@ -1408,6 +1420,7 @@ files:
1408
1420
  - templates/tool_svelte/build/smui.css
1409
1421
  - templates/tool_svelte/jest.config.js
1410
1422
  - templates/tool_svelte/package.json
1423
+ - templates/tool_svelte/pnpm-workspace.yaml
1411
1424
  - templates/tool_svelte/rollup.config.js
1412
1425
  - templates/tool_svelte/src/App.svelte
1413
1426
  - templates/tool_svelte/src/App.test.js
@@ -1419,6 +1432,7 @@ files:
1419
1432
  - templates/tool_vue/eslint.config.mjs
1420
1433
  - templates/tool_vue/jsconfig.json
1421
1434
  - templates/tool_vue/package.json
1435
+ - templates/tool_vue/pnpm-workspace.yaml
1422
1436
  - templates/tool_vue/src/App.vue
1423
1437
  - templates/tool_vue/src/main.js
1424
1438
  - templates/tool_vue/src/router.js
@@ -1428,6 +1442,7 @@ files:
1428
1442
  - templates/widget/LICENSE.md
1429
1443
  - templates/widget/Rakefile
1430
1444
  - templates/widget/package.json
1445
+ - templates/widget/pnpm-workspace.yaml
1431
1446
  - templates/widget/src/Widget.vue
1432
1447
  - templates/widget/vite.config.js
1433
1448
  homepage: https://github.com/OpenC3/cosmos