devex 0.3.5

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 (72) hide show
  1. checksums.yaml +7 -0
  2. data/.obsidian/app.json +6 -0
  3. data/.obsidian/appearance.json +4 -0
  4. data/.obsidian/community-plugins.json +5 -0
  5. data/.obsidian/core-plugins.json +33 -0
  6. data/.obsidian/plugins/obsidian-minimal-settings/data.json +34 -0
  7. data/.obsidian/plugins/obsidian-minimal-settings/main.js +8 -0
  8. data/.obsidian/plugins/obsidian-minimal-settings/manifest.json +11 -0
  9. data/.obsidian/plugins/obsidian-style-settings/data.json +15 -0
  10. data/.obsidian/plugins/obsidian-style-settings/main.js +165 -0
  11. data/.obsidian/plugins/obsidian-style-settings/manifest.json +10 -0
  12. data/.obsidian/plugins/obsidian-style-settings/styles.css +243 -0
  13. data/.obsidian/plugins/table-editor-obsidian/data.json +6 -0
  14. data/.obsidian/plugins/table-editor-obsidian/main.js +236 -0
  15. data/.obsidian/plugins/table-editor-obsidian/manifest.json +17 -0
  16. data/.obsidian/plugins/table-editor-obsidian/styles.css +78 -0
  17. data/.obsidian/themes/AnuPpuccin/manifest.json +7 -0
  18. data/.obsidian/themes/AnuPpuccin/theme.css +9080 -0
  19. data/.obsidian/themes/Minimal/manifest.json +8 -0
  20. data/.obsidian/themes/Minimal/theme.css +2251 -0
  21. data/.rubocop.yml +231 -0
  22. data/CHANGELOG.md +97 -0
  23. data/LICENSE +21 -0
  24. data/README.md +314 -0
  25. data/Rakefile +13 -0
  26. data/devex-logo.jpg +0 -0
  27. data/docs/developing-tools.md +1000 -0
  28. data/docs/ref/agent-mode.md +46 -0
  29. data/docs/ref/cli-interface.md +60 -0
  30. data/docs/ref/configuration.md +46 -0
  31. data/docs/ref/design-philosophy.md +17 -0
  32. data/docs/ref/error-handling.md +38 -0
  33. data/docs/ref/io-handling.md +88 -0
  34. data/docs/ref/signals.md +141 -0
  35. data/docs/ref/temporal-software-theory.md +790 -0
  36. data/exe/dx +52 -0
  37. data/lib/devex/builtins/.index.rb +10 -0
  38. data/lib/devex/builtins/debug.rb +43 -0
  39. data/lib/devex/builtins/format.rb +44 -0
  40. data/lib/devex/builtins/gem.rb +77 -0
  41. data/lib/devex/builtins/lint.rb +61 -0
  42. data/lib/devex/builtins/test.rb +76 -0
  43. data/lib/devex/builtins/version.rb +156 -0
  44. data/lib/devex/cli.rb +340 -0
  45. data/lib/devex/context.rb +433 -0
  46. data/lib/devex/core/configuration.rb +136 -0
  47. data/lib/devex/core.rb +79 -0
  48. data/lib/devex/dirs.rb +210 -0
  49. data/lib/devex/dsl.rb +100 -0
  50. data/lib/devex/exec/controller.rb +245 -0
  51. data/lib/devex/exec/result.rb +229 -0
  52. data/lib/devex/exec.rb +662 -0
  53. data/lib/devex/loader.rb +136 -0
  54. data/lib/devex/output.rb +257 -0
  55. data/lib/devex/project_paths.rb +309 -0
  56. data/lib/devex/support/ansi.rb +437 -0
  57. data/lib/devex/support/core_ext.rb +560 -0
  58. data/lib/devex/support/global.rb +68 -0
  59. data/lib/devex/support/path.rb +357 -0
  60. data/lib/devex/support.rb +71 -0
  61. data/lib/devex/template_helpers.rb +136 -0
  62. data/lib/devex/templates/debug.erb +24 -0
  63. data/lib/devex/tool.rb +374 -0
  64. data/lib/devex/version.rb +5 -0
  65. data/lib/devex/working_dir.rb +99 -0
  66. data/lib/devex.rb +158 -0
  67. data/ruby-project-template/.gitignore +0 -0
  68. data/ruby-project-template/Gemfile +0 -0
  69. data/ruby-project-template/README.md +0 -0
  70. data/ruby-project-template/docs/README.md +0 -0
  71. data/sig/devex.rbs +4 -0
  72. metadata +122 -0
@@ -0,0 +1,243 @@
1
+ .style-settings-heading {
2
+ cursor: pointer;
3
+ margin-bottom: 18px;
4
+ padding-bottom: 6px;
5
+ border-bottom: 1px solid var(--background-modifier-border);
6
+ }
7
+
8
+ .style-settings-heading[data-level="0"] {
9
+ margin-bottom: 26px;
10
+ }
11
+
12
+ .style-settings-container {
13
+ padding-bottom: 16px;
14
+ }
15
+
16
+ .style-settings-heading[data-level="0"] + .style-settings-container {
17
+ padding-left: 34px;
18
+ }
19
+
20
+ .style-settings-heading.is-collapsed {
21
+ margin-bottom: 0;
22
+ }
23
+
24
+ .style-settings-heading.is-collapsed + .style-settings-container {
25
+ display: none;
26
+ }
27
+
28
+ .style-settings-collapse-indicator {
29
+ color: var(--text-faint);
30
+ display: inline-block;
31
+ margin-right: 8px;
32
+ position: relative;
33
+ top: -1px;
34
+ }
35
+
36
+ .style-settings-heading[data-level="0"]
37
+ + .style-settings-container
38
+ .style-settings-collapse-indicator {
39
+ margin-left: -17px;
40
+ }
41
+
42
+ .style-settings-collapse-indicator > svg {
43
+ height: 9px;
44
+ width: 9px;
45
+ }
46
+
47
+ .style-settings-heading.is-collapsed .style-settings-collapse-indicator > svg {
48
+ transform: rotate(-90deg);
49
+ }
50
+
51
+ .style-settings-filter-result-count {
52
+ color: var(--text-faint);
53
+ line-height: var(--line-height-tight);
54
+ margin-inline: var(--size-4-2);
55
+ }
56
+
57
+ .style-settings-error {
58
+ font-size: 14px;
59
+ border-radius: 6px;
60
+ background: rgba(var(--background-modifier-error-rgb), 0.2);
61
+ color: var(--text-error);
62
+ padding: 10px;
63
+ margin-bottom: 1rem;
64
+ }
65
+
66
+ .style-settings-error-name {
67
+ font-weight: bold;
68
+ margin-bottom: 5px;
69
+ }
70
+
71
+ .style-settings-error-desc {
72
+ white-space: pre;
73
+ }
74
+
75
+ .style-settings-empty {
76
+ font-size: 14px;
77
+ background: var(--background-secondary);
78
+ padding: 10px;
79
+ }
80
+
81
+ .style-settings-empty-name {
82
+ font-weight: bold;
83
+ margin-bottom: 5px;
84
+ }
85
+
86
+ .style-settings-import-input {
87
+ width: 0.1px;
88
+ height: 0.1px;
89
+ opacity: 0;
90
+ overflow: hidden;
91
+ position: absolute;
92
+ z-index: -1;
93
+ }
94
+
95
+ .style-settings-import-label {
96
+ cursor: pointer;
97
+ color: var(--text-accent);
98
+ text-decoration: underline;
99
+ }
100
+
101
+ .style-settings-import-label:hover {
102
+ color: var(--text-accent-hover);
103
+ }
104
+
105
+ .style-settings-export,
106
+ .style-settings-import {
107
+ display: inline-block;
108
+ margin-right: 10px;
109
+ }
110
+
111
+ .style-settings-copy,
112
+ .style-settings-download {
113
+ position: relative;
114
+ display: inline-block;
115
+ margin-left: 10px;
116
+ }
117
+
118
+ .style-settings-copy:before {
119
+ color: var(--interactive-success);
120
+ content: "✓";
121
+ position: absolute;
122
+ left: -18px;
123
+ font-weight: bold;
124
+ opacity: 0;
125
+ transition: 150ms opacity ease-in-out;
126
+ }
127
+
128
+ .style-settings-copy.success:before {
129
+ opacity: 1;
130
+ }
131
+
132
+ .modal-style-settings {
133
+ height: 70vh;
134
+ display: flex;
135
+ flex-direction: column;
136
+ }
137
+
138
+ .modal-style-settings .modal-content {
139
+ flex-grow: 1;
140
+ margin: 0;
141
+ display: flex;
142
+ flex-direction: column;
143
+ }
144
+
145
+ .modal-style-settings textarea {
146
+ display: block;
147
+ width: 100%;
148
+ height: 100%;
149
+ font-family: var(--font-monospace) !important;
150
+ font-size: 12px;
151
+ white-space: pre;
152
+ overflow-wrap: normal;
153
+ overflow-x: scroll;
154
+ margin-bottom: 5px;
155
+ }
156
+
157
+ .modal-style-settings .setting-item {
158
+ align-items: flex-start;
159
+ }
160
+
161
+ .modal-style-settings button {
162
+ margin: 10px 0 0;
163
+ }
164
+
165
+ .style-settings-import-error {
166
+ display: none;
167
+ color: var(--text-error);
168
+ }
169
+
170
+ .style-settings-import-error.active {
171
+ display: block;
172
+ }
173
+
174
+ .view-content .style-settings-container .setting-item:not(.setting-item-heading) {
175
+ flex-direction: column;
176
+ align-items: flex-start;
177
+ }
178
+
179
+ .view-content .style-settings-container .setting-item:not(.setting-item-heading) .setting-item-control {
180
+ padding-top: 0.5em;
181
+ }
182
+
183
+ .view-content .style-settings-container .setting-item:not(.setting-item-heading) .themed-color-wrapper {
184
+ display: flex;
185
+ }
186
+
187
+ .style-settings-ref {
188
+ position: absolute;
189
+ width: 0 !important;
190
+ height: 0 !important;
191
+ pointer-events: none;
192
+ }
193
+
194
+ .style-settings-info-text .style-settings-markdown :first-child {
195
+ margin-top: 0;
196
+ }
197
+
198
+ .style-settings-info-text .style-settings-markdown :last-child {
199
+ margin-bottom: 0;
200
+ }.style-settings-container .pcr-app {
201
+ display: none;
202
+ }
203
+
204
+ .style-settings-container .pcr-app.visible {
205
+ display: flex;
206
+ }
207
+
208
+ .pcr-app .pcr-swatches > button {
209
+ padding: 0;
210
+ }
211
+
212
+ .pickr .pcr-button {
213
+ margin-right: 0;
214
+ }
215
+
216
+ .themed-color-wrapper > div {
217
+ background: var(--background-primary);
218
+ padding: 10px;
219
+ display: flex;
220
+ align-items: center;
221
+ border-radius: 4px;
222
+ }
223
+
224
+ .themed-color-wrapper > div + div {
225
+ margin-top: 6px;
226
+ }
227
+
228
+ .themed-color-wrapper button {
229
+ display: block;
230
+ }
231
+
232
+ .themed-color-wrapper .pickr-reset > button {
233
+ margin: 0 0 0 10px;
234
+ padding: 9px;
235
+ line-height: 1;
236
+ }
237
+
238
+ .themed-color-wrapper .pickr-reset > button > svg {
239
+ display: block;
240
+ }
241
+ /*! Pickr 1.8.4 MIT | https://github.com/Simonwep/pickr */
242
+ .pickr{position:relative;overflow:visible;transform:translateY(0)}.pickr *{box-sizing:border-box;outline:none;border:none;-webkit-appearance:none}.pickr .pcr-button{position:relative;height:2em;width:2em;padding:0.5em;cursor:pointer;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Helvetica Neue",Arial,sans-serif;border-radius:.15em;background:url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" stroke="%2342445A" stroke-width="5px" stroke-linecap="round"><path d="M45,45L5,5"></path><path d="M45,5L5,45"></path></svg>') no-repeat center;background-size:0;transition:all 0.3s}.pickr .pcr-button::before{position:absolute;content:'';top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');background-size:.5em;border-radius:.15em;z-index:-1}.pickr .pcr-button::before{z-index:initial}.pickr .pcr-button::after{position:absolute;content:'';top:0;left:0;height:100%;width:100%;transition:background 0.3s;background:var(--pcr-color);border-radius:.15em}.pickr .pcr-button.clear{background-size:70%}.pickr .pcr-button.clear::before{opacity:0}.pickr .pcr-button.clear:focus{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px var(--pcr-color)}.pickr .pcr-button.disabled{cursor:not-allowed}.pickr *,.pcr-app *{box-sizing:border-box;outline:none;border:none;-webkit-appearance:none}.pickr input:focus,.pickr input.pcr-active,.pickr button:focus,.pickr button.pcr-active,.pcr-app input:focus,.pcr-app input.pcr-active,.pcr-app button:focus,.pcr-app button.pcr-active{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px var(--pcr-color)}.pickr .pcr-palette,.pickr .pcr-slider,.pcr-app .pcr-palette,.pcr-app .pcr-slider{transition:box-shadow 0.3s}.pickr .pcr-palette:focus,.pickr .pcr-slider:focus,.pcr-app .pcr-palette:focus,.pcr-app .pcr-slider:focus{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px rgba(0,0,0,0.25)}.pcr-app{position:fixed;display:flex;flex-direction:column;z-index:10000;border-radius:0.1em;background:#fff;opacity:0;visibility:hidden;transition:opacity 0.3s, visibility 0s 0.3s;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Helvetica Neue",Arial,sans-serif;box-shadow:0 0.15em 1.5em 0 rgba(0,0,0,0.1),0 0 1em 0 rgba(0,0,0,0.03);left:0;top:0}.pcr-app.visible{transition:opacity 0.3s;visibility:visible;opacity:1}.pcr-app .pcr-swatches{display:flex;flex-wrap:wrap;margin-top:0.75em}.pcr-app .pcr-swatches.pcr-last{margin:0}@supports (display: grid){.pcr-app .pcr-swatches{display:grid;align-items:center;grid-template-columns:repeat(auto-fit, 1.75em)}}.pcr-app .pcr-swatches>button{font-size:1em;position:relative;width:calc(1.75em - 5px);height:calc(1.75em - 5px);border-radius:0.15em;cursor:pointer;margin:2.5px;flex-shrink:0;justify-self:center;transition:all 0.15s;overflow:hidden;background:transparent;z-index:1}.pcr-app .pcr-swatches>button::before{position:absolute;content:'';top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');background-size:6px;border-radius:.15em;z-index:-1}.pcr-app .pcr-swatches>button::after{content:'';position:absolute;top:0;left:0;width:100%;height:100%;background:var(--pcr-color);border:1px solid rgba(0,0,0,0.05);border-radius:0.15em;box-sizing:border-box}.pcr-app .pcr-swatches>button:hover{filter:brightness(1.05)}.pcr-app .pcr-swatches>button:not(.pcr-active){box-shadow:none}.pcr-app .pcr-interaction{display:flex;flex-wrap:wrap;align-items:center;margin:0 -0.2em 0 -0.2em}.pcr-app .pcr-interaction>*{margin:0 0.2em}.pcr-app .pcr-interaction input{letter-spacing:0.07em;font-size:0.75em;text-align:center;cursor:pointer;color:#75797e;background:#f1f3f4;border-radius:.15em;transition:all 0.15s;padding:0.45em 0.5em;margin-top:0.75em}.pcr-app .pcr-interaction input:hover{filter:brightness(0.975)}.pcr-app .pcr-interaction input:focus{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px rgba(66,133,244,0.75)}.pcr-app .pcr-interaction .pcr-result{color:#75797e;text-align:left;flex:1 1 8em;min-width:8em;transition:all 0.2s;border-radius:.15em;background:#f1f3f4;cursor:text}.pcr-app .pcr-interaction .pcr-result::-moz-selection{background:#4285f4;color:#fff}.pcr-app .pcr-interaction .pcr-result::selection{background:#4285f4;color:#fff}.pcr-app .pcr-interaction .pcr-type.active{color:#fff;background:#4285f4}.pcr-app .pcr-interaction .pcr-save,.pcr-app .pcr-interaction .pcr-cancel,.pcr-app .pcr-interaction .pcr-clear{color:#fff;width:auto}.pcr-app .pcr-interaction .pcr-save,.pcr-app .pcr-interaction .pcr-cancel,.pcr-app .pcr-interaction .pcr-clear{color:#fff}.pcr-app .pcr-interaction .pcr-save:hover,.pcr-app .pcr-interaction .pcr-cancel:hover,.pcr-app .pcr-interaction .pcr-clear:hover{filter:brightness(0.925)}.pcr-app .pcr-interaction .pcr-save{background:#4285f4}.pcr-app .pcr-interaction .pcr-clear,.pcr-app .pcr-interaction .pcr-cancel{background:#f44250}.pcr-app .pcr-interaction .pcr-clear:focus,.pcr-app .pcr-interaction .pcr-cancel:focus{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px rgba(244,66,80,0.75)}.pcr-app .pcr-selection .pcr-picker{position:absolute;height:18px;width:18px;border:2px solid #fff;border-radius:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pcr-app .pcr-selection .pcr-color-palette,.pcr-app .pcr-selection .pcr-color-chooser,.pcr-app .pcr-selection .pcr-color-opacity{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-direction:column;cursor:grab;cursor:-webkit-grab}.pcr-app .pcr-selection .pcr-color-palette:active,.pcr-app .pcr-selection .pcr-color-chooser:active,.pcr-app .pcr-selection .pcr-color-opacity:active{cursor:grabbing;cursor:-webkit-grabbing}.pcr-app[data-theme='nano']{width:14.25em;max-width:95vw}.pcr-app[data-theme='nano'] .pcr-swatches{margin-top:.6em;padding:0 .6em}.pcr-app[data-theme='nano'] .pcr-interaction{padding:0 .6em .6em .6em}.pcr-app[data-theme='nano'] .pcr-selection{display:grid;grid-gap:.6em;grid-template-columns:1fr 4fr;grid-template-rows:5fr auto auto;align-items:center;height:10.5em;width:100%;align-self:flex-start}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview{grid-area:2 / 1 / 4 / 1;height:100%;width:100%;display:flex;flex-direction:row;justify-content:center;margin-left:.6em}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview .pcr-last-color{display:none}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview .pcr-current-color{position:relative;background:var(--pcr-color);width:2em;height:2em;border-radius:50em;overflow:hidden}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview .pcr-current-color::before{position:absolute;content:'';top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');background-size:.5em;border-radius:.15em;z-index:-1}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-palette{grid-area:1 / 1 / 2 / 3;width:100%;height:100%;z-index:1}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-palette .pcr-palette{border-radius:.15em;width:100%;height:100%}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-palette .pcr-palette::before{position:absolute;content:'';top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');background-size:.5em;border-radius:.15em;z-index:-1}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser{grid-area:2 / 2 / 2 / 2}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity{grid-area:3 / 2 / 3 / 2}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser,.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity{height:0.5em;margin:0 .6em}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser .pcr-picker,.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity .pcr-picker{top:50%;transform:translateY(-50%)}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser .pcr-slider,.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity .pcr-slider{flex-grow:1;border-radius:50em}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser .pcr-slider{background:linear-gradient(to right, red, #ff0, lime, cyan, blue, #f0f, red)}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity .pcr-slider{background:linear-gradient(to right, transparent, black),url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');background-size:100%, 0.25em}
243
+
@@ -0,0 +1,6 @@
1
+ {
2
+ "formatType": "normal",
3
+ "showRibbonIcon": true,
4
+ "bindEnter": true,
5
+ "bindTab": true
6
+ }