ferp 0.7.1__py3-none-any.whl

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 (87) hide show
  1. ferp/__init__.py +3 -0
  2. ferp/__main__.py +4 -0
  3. ferp/__version__.py +1 -0
  4. ferp/app.py +9 -0
  5. ferp/cli.py +160 -0
  6. ferp/core/__init__.py +0 -0
  7. ferp/core/app.py +1312 -0
  8. ferp/core/bundle_installer.py +245 -0
  9. ferp/core/command_provider.py +77 -0
  10. ferp/core/dependency_manager.py +59 -0
  11. ferp/core/fs_controller.py +70 -0
  12. ferp/core/fs_watcher.py +144 -0
  13. ferp/core/messages.py +49 -0
  14. ferp/core/path_actions.py +124 -0
  15. ferp/core/paths.py +3 -0
  16. ferp/core/protocols.py +8 -0
  17. ferp/core/script_controller.py +515 -0
  18. ferp/core/script_protocol.py +35 -0
  19. ferp/core/script_runner.py +421 -0
  20. ferp/core/settings.py +16 -0
  21. ferp/core/settings_store.py +69 -0
  22. ferp/core/state.py +156 -0
  23. ferp/core/task_store.py +164 -0
  24. ferp/core/transcript_logger.py +95 -0
  25. ferp/domain/__init__.py +0 -0
  26. ferp/domain/scripts.py +29 -0
  27. ferp/fscp/host/__init__.py +11 -0
  28. ferp/fscp/host/host.py +439 -0
  29. ferp/fscp/host/managed_process.py +113 -0
  30. ferp/fscp/host/process_registry.py +124 -0
  31. ferp/fscp/protocol/__init__.py +13 -0
  32. ferp/fscp/protocol/errors.py +2 -0
  33. ferp/fscp/protocol/messages.py +55 -0
  34. ferp/fscp/protocol/schemas/__init__.py +0 -0
  35. ferp/fscp/protocol/schemas/fscp/1.0/cancel.json +16 -0
  36. ferp/fscp/protocol/schemas/fscp/1.0/definitions.json +29 -0
  37. ferp/fscp/protocol/schemas/fscp/1.0/discriminator.json +14 -0
  38. ferp/fscp/protocol/schemas/fscp/1.0/envelope.json +13 -0
  39. ferp/fscp/protocol/schemas/fscp/1.0/exit.json +20 -0
  40. ferp/fscp/protocol/schemas/fscp/1.0/init.json +36 -0
  41. ferp/fscp/protocol/schemas/fscp/1.0/input_response.json +21 -0
  42. ferp/fscp/protocol/schemas/fscp/1.0/log.json +21 -0
  43. ferp/fscp/protocol/schemas/fscp/1.0/message.json +23 -0
  44. ferp/fscp/protocol/schemas/fscp/1.0/progress.json +23 -0
  45. ferp/fscp/protocol/schemas/fscp/1.0/request_input.json +47 -0
  46. ferp/fscp/protocol/schemas/fscp/1.0/result.json +16 -0
  47. ferp/fscp/protocol/schemas/fscp/__init__.py +0 -0
  48. ferp/fscp/protocol/state.py +16 -0
  49. ferp/fscp/protocol/validator.py +123 -0
  50. ferp/fscp/scripts/__init__.py +0 -0
  51. ferp/fscp/scripts/runtime/__init__.py +4 -0
  52. ferp/fscp/scripts/runtime/__main__.py +40 -0
  53. ferp/fscp/scripts/runtime/errors.py +14 -0
  54. ferp/fscp/scripts/runtime/io.py +64 -0
  55. ferp/fscp/scripts/runtime/script.py +149 -0
  56. ferp/fscp/scripts/runtime/state.py +17 -0
  57. ferp/fscp/scripts/runtime/worker.py +13 -0
  58. ferp/fscp/scripts/sdk.py +548 -0
  59. ferp/fscp/transcript/__init__.py +3 -0
  60. ferp/fscp/transcript/events.py +14 -0
  61. ferp/resources/__init__.py +0 -0
  62. ferp/services/__init__.py +3 -0
  63. ferp/services/file_listing.py +120 -0
  64. ferp/services/monday_sync.py +155 -0
  65. ferp/services/releases.py +214 -0
  66. ferp/services/scripts.py +90 -0
  67. ferp/services/update_check.py +130 -0
  68. ferp/styles/index.tcss +638 -0
  69. ferp/themes/themes.py +238 -0
  70. ferp/widgets/__init__.py +17 -0
  71. ferp/widgets/dialogs.py +167 -0
  72. ferp/widgets/file_tree.py +991 -0
  73. ferp/widgets/forms.py +146 -0
  74. ferp/widgets/output_panel.py +244 -0
  75. ferp/widgets/panels.py +13 -0
  76. ferp/widgets/process_list.py +158 -0
  77. ferp/widgets/readme_modal.py +59 -0
  78. ferp/widgets/scripts.py +192 -0
  79. ferp/widgets/task_capture.py +74 -0
  80. ferp/widgets/task_list.py +493 -0
  81. ferp/widgets/top_bar.py +110 -0
  82. ferp-0.7.1.dist-info/METADATA +128 -0
  83. ferp-0.7.1.dist-info/RECORD +87 -0
  84. ferp-0.7.1.dist-info/WHEEL +5 -0
  85. ferp-0.7.1.dist-info/entry_points.txt +2 -0
  86. ferp-0.7.1.dist-info/licenses/LICENSE +21 -0
  87. ferp-0.7.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,128 @@
1
+ Metadata-Version: 2.4
2
+ Name: ferp
3
+ Version: 0.7.1
4
+ Summary: Terminal-first file navigator and FSCP automation workbench built with Textual.
5
+ Author: Brandon Johnson
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/zappbrandigan/ferp
8
+ Project-URL: Documentation, https://github.com/zappbrandigan/ferp#readme
9
+ Project-URL: Issues, https://github.com/zappbrandigan/ferp/issues
10
+ Classifier: Environment :: Console
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Topic :: System :: Shells
13
+ Classifier: Topic :: Utilities
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3 :: Only
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Requires-Python: >=3.13
18
+ Description-Content-Type: text/markdown
19
+ License-File: LICENSE
20
+ Requires-Dist: jsonschema>=4.21
21
+ Requires-Dist: watchdog>=4.0
22
+ Requires-Dist: textual>=7.4.0
23
+ Requires-Dist: platformdirs>=4.2
24
+ Requires-Dist: requests>=2.32
25
+ Provides-Extra: dev
26
+ Requires-Dist: pypdf>=6.6; extra == "dev"
27
+ Requires-Dist: extract-msg>=0.55.0; extra == "dev"
28
+ Requires-Dist: openpyxl>=3.1; extra == "dev"
29
+ Requires-Dist: xlwings>=0.33; extra == "dev"
30
+ Requires-Dist: googletrans==4.0.2; extra == "dev"
31
+ Requires-Dist: Unidecode>=1.3.8; extra == "dev"
32
+ Requires-Dist: pywin32>=306; platform_system == "Windows" and extra == "dev"
33
+ Requires-Dist: pdfplumber>=0.11.8; extra == "dev"
34
+ Requires-Dist: reportlab>=4.4.9; extra == "dev"
35
+ Requires-Dist: py7zr>=1.1.2; extra == "dev"
36
+ Requires-Dist: pytest>=8.2; extra == "dev"
37
+ Requires-Dist: textual-dev>=1.8.0; extra == "dev"
38
+ Dynamic: license-file
39
+
40
+ # FER​P – For Executing Repetitive Processes
41
+
42
+ FERP is a terminal-friendly file manager and automation workbench. It combines an interactive file navigator, contextual metadata inspection, and a protocol-driven script runner so you can explore directories and execute repeatable workflows through a TUI—without requiring terminal knowledge.
43
+
44
+ ## Highlights
45
+
46
+ - **Keyboard-first navigation**
47
+ - A full list of keys are available in the app.
48
+ - **Context panes**
49
+ - Script list reads from the user config `config.json` (platformdirs).
50
+ - Output panel streams FSCP results and records transcripts under the user data `logs` directory.
51
+ - README modal (Enter on a script) displays bundled documentation.
52
+ - **Managed script runtime**
53
+ - Scripts execute via the FSCP host ↔ script protocol.
54
+ - Interactive prompts, confirmations, progress, and structured results are supported.
55
+ - Logs are timestamped and automatically pruned (default 50 files / 14 days).
56
+
57
+ ## Quick Start
58
+
59
+ ```bash
60
+ pipx install ferp
61
+ ```
62
+
63
+ > [!NOTE]
64
+ > To use the default scripts, open the command palette (`Ctrl+P`) and select **Install/Update Default Scripts**.
65
+
66
+ > [!WARNING]
67
+ > This option is intended for users who do not wish to manage scripts manually. It will remove any existing scripts you have installed.
68
+ >
69
+ > If you prefer to install scripts individually, create a bundle for the desired script using the source files from
70
+ > [ferp-scripts](https://github.com/zappbrandigan/ferp-scripts).
71
+
72
+ ## Configuring Scripts
73
+
74
+ Scripts are declared in your user config `config.json` (created on first script install). Each entry defines:
75
+
76
+ - `script`: path to the executable (e.g. `scripts/ferp.zip_dir/script.py`).
77
+ - `target`: `current_directory`, `highlighted_file`, or `highlighted_directory`.
78
+ - `file_extensions`: optional list of suffixes (for `highlighted_file` targets).
79
+ - Optional README at `scripts/<id>/readme.md`.
80
+
81
+ Each script lives under `scripts/<id>/` (the directory name matches the fully-qualified ID, such as `ferp.zip_dir`). Inside the directory:
82
+
83
+ - `script.py` contains the executable FSCP script.
84
+ - `readme.md` provides the optional documentation shown inside FER​P.
85
+
86
+ ### Dev toggle for script config
87
+
88
+ During development you can point FER​P at the repo copy of `ferp/scripts/config.json` instead of the user config file:
89
+
90
+ ```bash
91
+ FERP_DEV_CONFIG=1 python -m ferp
92
+ ```
93
+
94
+ When enabled, FER​P reads the config directly from the repository and skips the one-time copy into the user config directory.
95
+
96
+ ## Authoring FSCP Scripts
97
+
98
+ Python scripts executed from FER​P speak the [FSCP](./ferp/fscp) protocol. See
99
+ `SCRIPT_AUTHORS.md` for the SDK guide, examples, logging, cancellation, cleanup,
100
+ and packaging details.
101
+
102
+ ## Terminal Commands
103
+
104
+ FERP opens your system terminal in the current directory (shown in the top bar).
105
+
106
+ - Open a terminal using `Ctrl+t`.
107
+ - The spawned terminal inherits the current working directory.
108
+ - On Windows system, prefers PowerShell and falls back to CommandPrompt.
109
+
110
+ ## Task List
111
+
112
+ FERP includes a lightweight task list for quick capture and review.
113
+
114
+ - Press `t` to add a task from anywhere in the UI.
115
+ - Press `l` to open the task list and review or mark tasks as complete.
116
+ - Tag tasks with `@` for text highlighting and filtering.
117
+ - Toggle completion status with the space bar.
118
+ - The task status indicator updates automatically as tasks are completed.
119
+
120
+ ## Other Features
121
+
122
+ - **Script catalog refresh**: Reload the script list after editing config.
123
+ - **Default script updates**: Pull the latest default scripts from the release feed.
124
+ - **Process list**: View and stop running scripts from the command palette.
125
+ - **Tasks**: Capture quick tasks and review them in the task list.
126
+ - **Themes**: Switch themes from the command palette.
127
+ - **Startup directory**: Set the default path Ferp opens on launch.
128
+ - **Logs**: Open the latest transcript log from the command palette.
@@ -0,0 +1,87 @@
1
+ ferp/__init__.py,sha256=OuqD7ccFgzZpmQpnGVPU2O_U2ITvETGXiWZ0KHN5j9g,64
2
+ ferp/__main__.py,sha256=g5qi-I4ojhTuy_0u3bVskW8xnqLTAr3BbWfbsGsHT4A,65
3
+ ferp/__version__.py,sha256=2KJZDSMOG7KS82AxYOrZ4ZihYxX0wjfUjDsIZh3L024,22
4
+ ferp/app.py,sha256=z9oVlCS9ugtDgponbzXSaxzP-hY_d07XrthIiZmPmo0,110
5
+ ferp/cli.py,sha256=fueoVXXwbX2Zv6eMMOv23z9PMSlCMVqHzTkjVBYIYxo,4796
6
+ ferp/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ ferp/core/app.py,sha256=Ds-5nv4w-ar1tblkoI8z1K7oMM2c8BrPS6bhK0fIP4s,49372
8
+ ferp/core/bundle_installer.py,sha256=V4BG-BlMvMbcNB2uFG1quQM-qqFDYj87nyusxvvDVUk,8674
9
+ ferp/core/command_provider.py,sha256=Qs0BA41JCE8KT5PR1sP2X1LDc_U5vv_Y9cOYtJ6xvU0,2518
10
+ ferp/core/dependency_manager.py,sha256=5pqsNYIE4sKuw7w5ckRPJPR0le8RcNQ4G2xPYZjKB8k,2191
11
+ ferp/core/fs_controller.py,sha256=oM8cS_om92fk_m6QGAt5JyjYn4-fnWnGNf5FimFS1oU,1959
12
+ ferp/core/fs_watcher.py,sha256=g4q6WXvgoanmhcshXMc3S0poQLIrQrQaQPg4v-nf1Mg,4861
13
+ ferp/core/messages.py,sha256=lzqkG1WMBcaYx2srKOo5wmYRZK92j3Vvw1Kh9ZH7fJw,1185
14
+ ferp/core/path_actions.py,sha256=uUSlBllrTH_Oh0XJ232iFm4FiywKlXcxAlmLlNUwgnQ,3945
15
+ ferp/core/paths.py,sha256=nKvYBbk6ngmFbTYQlv56LdVqi-EK1mYzsurf-U6YTvE,114
16
+ ferp/core/protocols.py,sha256=aGsM9zubcU1HiIu1wJvwc24xNWN8ZDZ6779cfKMWGs4,156
17
+ ferp/core/script_controller.py,sha256=r1p35yAcSOnh2rXMMmVGkSD5XPSVHipSKMKaaN6H8HU,17654
18
+ ferp/core/script_protocol.py,sha256=E2rYfg9h5XFrhpxbMP0gE6OAGRPlSohCYN427flRIdA,754
19
+ ferp/core/script_runner.py,sha256=xjknf4bTz-PKboJ_ReLsLzTrpTrmBdVJK-GtdBdJXBQ,13782
20
+ ferp/core/settings.py,sha256=zCY8lfYIXrPtELPc304cnuuPUKk1F7lUcvozznkVHhs,501
21
+ ferp/core/settings_store.py,sha256=FfypSIdzHPeYexTFZrJxTQh-ia-ojppGQgxgNyfmf5M,2316
22
+ ferp/core/state.py,sha256=l7uaQp9-82p-hAFClGshmX2WCYoCeLqSG8oDRQMYvcI,5196
23
+ ferp/core/task_store.py,sha256=teMDEy9PT503cCXQV_rbS5R4iMxBsywzL0fxpBFY9ak,5182
24
+ ferp/core/transcript_logger.py,sha256=kUreRHfGZE0EfX0U8ZC_itQ1yudsDOZoSuwjQG1Byas,2885
25
+ ferp/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
+ ferp/domain/scripts.py,sha256=XkPoh_JPrSXuIYd9gJbZ4i5FpH2uwWklKwo3Hibv-6Q,563
27
+ ferp/fscp/host/__init__.py,sha256=LU-IOmZEAVBhUhrVZLTN6rb-jwdR-dO68IL7bnRswLM,261
28
+ ferp/fscp/host/host.py,sha256=SzesYOgcg7JU5p6N9vXaFdrbAQm27l84r50MT3ls_zI,15180
29
+ ferp/fscp/host/managed_process.py,sha256=8x_tsu9hejIJstTKYu3YNr3uEm7x2cM5YmsjutXz1rE,3079
30
+ ferp/fscp/host/process_registry.py,sha256=QFy7gnABUzsQyaeBnyBAvWExP_mm0OBjLhQ0hpb_rAM,3547
31
+ ferp/fscp/protocol/__init__.py,sha256=7q4bujRjdnOq2q8jC3116ITN5JiiPxZ5EKje_WfZJW8,309
32
+ ferp/fscp/protocol/errors.py,sha256=jNSgtCQe8WbSklZCv4dnec8HRlMutT6TqwqBuXioRyU,90
33
+ ferp/fscp/protocol/messages.py,sha256=Q4ZRza3BFVN55YqqtfUv9pXrcHs47Qnw-tne7-5T2VQ,1331
34
+ ferp/fscp/protocol/state.py,sha256=qCt82AGCZYJ6vl2FCvl5VBMjN361TjHVgBIkbhsg41o,544
35
+ ferp/fscp/protocol/validator.py,sha256=93pvIyH63x9zAxiOAsUPvj3rTpxIgjrVTqLim1AiqyI,3442
36
+ ferp/fscp/protocol/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ ferp/fscp/protocol/schemas/fscp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
+ ferp/fscp/protocol/schemas/fscp/1.0/cancel.json,sha256=dDa8sADAKQu7RKLILlnWLKzyupKWUce7240XWzhTpK0,352
39
+ ferp/fscp/protocol/schemas/fscp/1.0/definitions.json,sha256=4b0kbetz9XU3Dbyd8jUvGZ5RqXiIWjVz9UI4zsthcAQ,553
40
+ ferp/fscp/protocol/schemas/fscp/1.0/discriminator.json,sha256=9aU7UtltzQ43ZBqpRXfbOaT9OUiwISfE1Y8U-e3lSVs,397
41
+ ferp/fscp/protocol/schemas/fscp/1.0/envelope.json,sha256=rE5ZBXMITEsFd0ceZa-cLS_K4032HsOZW5EZEsJ9P4Y,422
42
+ ferp/fscp/protocol/schemas/fscp/1.0/exit.json,sha256=oeXhYuUd6TCf1Oijk9oJrQ0cG_v2br7B9sYf5be6YJM,461
43
+ ferp/fscp/protocol/schemas/fscp/1.0/init.json,sha256=tLY7sjA7e5PHO5_5s_d_g5zGxVadGChrEY5ohSa-evc,963
44
+ ferp/fscp/protocol/schemas/fscp/1.0/input_response.json,sha256=2A8P5b-ntyVNXRsOAuQEHfYy0drNH6uf2t9lJOyMJmg,528
45
+ ferp/fscp/protocol/schemas/fscp/1.0/log.json,sha256=1q1wH98xePvN_c9raUxawkpXKpF9EZIF07xk1vydQ7k,548
46
+ ferp/fscp/protocol/schemas/fscp/1.0/message.json,sha256=7wcoIPuyKSq33Lnn_ZiOQgLl0h2OXaxXMOvLLXyIVTI,520
47
+ ferp/fscp/protocol/schemas/fscp/1.0/progress.json,sha256=0GBRO8GOs_cNXEJ-5STHB4j3y1PzLaI8ZdXaCUEieR8,632
48
+ ferp/fscp/protocol/schemas/fscp/1.0/request_input.json,sha256=P-VWIsb3xyqiYQHhpb7hzKjRZoIjGB1m-mlYv5BX2Mw,1500
49
+ ferp/fscp/protocol/schemas/fscp/1.0/result.json,sha256=wgCy-dfcGIhxvI8ZvH-9EGLU1tU6mFb0mXCRN-kdaBY,351
50
+ ferp/fscp/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
+ ferp/fscp/scripts/sdk.py,sha256=SS_3swkT-obDp2GTQlEpan92YUEbg5dyPw7JyxgaPw4,17132
52
+ ferp/fscp/scripts/runtime/__init__.py,sha256=sGCJ0hlraOzxRY6f-K7_6RICPnzAHDagZkgbJv9py1w,160
53
+ ferp/fscp/scripts/runtime/__main__.py,sha256=yw2-x3n1DDLNuvzJU3ws4CfYvc9oypOiPzfSJF2OFEc,888
54
+ ferp/fscp/scripts/runtime/errors.py,sha256=VbRdFwrov4kEFthaihDasGfNYpZjGLAK2_BRreHnjNY,357
55
+ ferp/fscp/scripts/runtime/io.py,sha256=8g-mvXqguo9usgJqSrVaov-quyuQkBgtsMbAad_pKac,1705
56
+ ferp/fscp/scripts/runtime/script.py,sha256=tNC83B1vTe71PWvlxiluZYAky-uGtWmpFEq-oTaYTHk,4583
57
+ ferp/fscp/scripts/runtime/state.py,sha256=lbDbxm9Ssiyahx-njCv_z2cv1tfeaf_oSzq0ZFiQRVU,581
58
+ ferp/fscp/scripts/runtime/worker.py,sha256=nsBkOyfAtFrkkpsPmzAXFUmMIiapJJg_u5Ro_pi_yXY,392
59
+ ferp/fscp/transcript/__init__.py,sha256=QOAMyqzwkhwXjmPbM3UzSqxUfoApL9nzLOwKzIXIaRg,67
60
+ ferp/fscp/transcript/events.py,sha256=aaWpUv4-Y5v5TX6TK-qgyxowCUnoi2I8DaVVcGVdJzM,322
61
+ ferp/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
+ ferp/services/__init__.py,sha256=xJEuxtPi8jqW-rSrKhW4trDmGFW4svSiW0blOpsy0K8,134
63
+ ferp/services/file_listing.py,sha256=Jp__Qou4VSChHId-k6OADGug2Bm_-VIyvOsBrs6fpbM,3371
64
+ ferp/services/monday_sync.py,sha256=e3xjIOXO9DF9nrZibTbaeekYA6-LYnHbd5OE8XDLnMM,4964
65
+ ferp/services/releases.py,sha256=rakn0NvfSmKNswgXF3mZV34hOgPlr0ZRI2fZB0zdaCM,7393
66
+ ferp/services/scripts.py,sha256=SiinZWVpXbNrTf_jVK_oP0oKDwvVMc9YYnXzHmgt78s,2929
67
+ ferp/services/update_check.py,sha256=DRFzpbLtz_y_xwc_2z93LT2ZyfXRCHWcnysd_3kXGX8,3867
68
+ ferp/styles/index.tcss,sha256=QX9MHi_0OGEIg8GhH9DQsCaEIkkHWfYxMYEVkKRoHdA,12865
69
+ ferp/themes/themes.py,sha256=qxSz7NmDKI68IqwUfqrs91YDXulWzMl8dnNlWpjGCNc,5396
70
+ ferp/widgets/__init__.py,sha256=PVqPghIlBgv2LIqGIl5wGpvso8PFJUscEZgO2Yg7hjU,445
71
+ ferp/widgets/dialogs.py,sha256=VjomKWLZvKLEpZ_Nb5Bn6pCSYALacTk9egYZZsDkidM,5440
72
+ ferp/widgets/file_tree.py,sha256=G7_ZENE03tbOJEXakDLcGzEhIn1nv6QhvuHFxfse9JQ,34383
73
+ ferp/widgets/forms.py,sha256=wHIfygonoVt3o-6FT2oiFU4dju6ZAStVDA0KM6sU1xY,5030
74
+ ferp/widgets/output_panel.py,sha256=zddbKg6EST0airyPSmEmMQ14fyPUbs762rIAH6D-DyA,9367
75
+ ferp/widgets/panels.py,sha256=58Oq1_jpeYud4gTRZbae40kEDSd-E53i2FVRMVSqNgA,354
76
+ ferp/widgets/process_list.py,sha256=uyDsEvGQ3v47CAhQ6iuJu3AHAY866MdkA6acL3fXQOo,5240
77
+ ferp/widgets/readme_modal.py,sha256=W91wCUWebx12AgTJqYIvqblTvGrF7KysOR4fp1PU2dw,2199
78
+ ferp/widgets/scripts.py,sha256=cpuN-7yi7bfYNBQWTzxpOUjjs2PArLhKJ4FUhFrUXps,6078
79
+ ferp/widgets/task_capture.py,sha256=j9X-BenKs6NPbrk6lAaKWHD4XhYcuyldw_NNcQEEs-c,2366
80
+ ferp/widgets/task_list.py,sha256=SYU1LVHyjuQQvHtfUjk_p-aoGdjVTBhP4FW75mdng1w,17288
81
+ ferp/widgets/top_bar.py,sha256=sIw7ceCgsq7ChxK37N0QyfwiIk9ftNdcOZNYk3s1vlU,3349
82
+ ferp-0.7.1.dist-info/licenses/LICENSE,sha256=coX1c1i5Os4wRPjOgz91IC9Mmf5sjSeBzd_XYUpRZC8,1071
83
+ ferp-0.7.1.dist-info/METADATA,sha256=M5tM43LR-Z09OyWaT3Xs_e0zTLWhKhktB5VLjIq5OZM,5432
84
+ ferp-0.7.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
85
+ ferp-0.7.1.dist-info/entry_points.txt,sha256=IpUreh27vY6rLqp2QA7ljAbt4vJRqOJQxVmvLdNa4_o,39
86
+ ferp-0.7.1.dist-info/top_level.txt,sha256=eIJrCfqCLwNJCS_xJr4xH_X66Vn0gtcJE4yjsc0lJkQ,5
87
+ ferp-0.7.1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.10.2)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ ferp = ferp.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Brandon Johnson
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ ferp