gulp-cli 1.1.8__tar.gz → 1.1.10__tar.gz

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 (70) hide show
  1. {gulp_cli-1.1.8/src/gulp_cli.egg-info → gulp_cli-1.1.10}/PKG-INFO +2 -2
  2. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/README.md +1 -1
  3. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/docs/command-reference.md +6 -60
  4. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/docs/examples.md +5 -10
  5. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/docs/getting-started.md +3 -3
  6. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/docs/resource-management.md +0 -52
  7. gulp_cli-1.1.10/docs/stdout-markers.md +125 -0
  8. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/_version.py +3 -3
  9. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/ingest.py +256 -211
  10. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/plugin.py +0 -68
  11. {gulp_cli-1.1.8 → gulp_cli-1.1.10/src/gulp_cli.egg-info}/PKG-INFO +2 -2
  12. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli.egg-info/SOURCES.txt +1 -0
  13. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli.egg-info/scm_file_list.json +1 -0
  14. gulp_cli-1.1.10/src/gulp_cli.egg-info/scm_version.json +8 -0
  15. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/tests/test_ingest_paths_file.py +37 -0
  16. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/tests/test_ingest_wait_log.py +87 -11
  17. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/tests/test_zip_create.py +26 -0
  18. gulp_cli-1.1.8/src/gulp_cli.egg-info/scm_version.json +0 -8
  19. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/.github/workflows/portable-bundles.yml +0 -0
  20. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/.github/workflows/python-package.yml +0 -0
  21. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/.gitignore +0 -0
  22. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/GULP_DUAL_LICENSE.txt +0 -0
  23. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/LICENSE.AGPL-3.0.txt +0 -0
  24. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/LICENSE.md +0 -0
  25. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/docs/extensions.md +0 -0
  26. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/docs/portable.md +0 -0
  27. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/docs/troubleshooting-cli.md +0 -0
  28. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/gulp-cli.spec +0 -0
  29. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/portable/launch-linux.sh +0 -0
  30. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/portable/launch-macos.sh +0 -0
  31. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/portable/launch-windows.bat +0 -0
  32. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/pyproject.toml +0 -0
  33. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/setup.cfg +0 -0
  34. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/__init__.py +0 -0
  35. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/__main__.py +0 -0
  36. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/cli.py +0 -0
  37. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/client.py +0 -0
  38. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/__init__.py +0 -0
  39. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/acl.py +0 -0
  40. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/auth.py +0 -0
  41. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/collab.py +0 -0
  42. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/context.py +0 -0
  43. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/db.py +0 -0
  44. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/enhance_map.py +0 -0
  45. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/enrich.py +0 -0
  46. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/glyph.py +0 -0
  47. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/mapping.py +0 -0
  48. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/operations.py +0 -0
  49. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/query.py +0 -0
  50. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/source.py +0 -0
  51. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/stats.py +0 -0
  52. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/storage.py +0 -0
  53. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/user_group.py +0 -0
  54. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/users.py +0 -0
  55. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/utility.py +0 -0
  56. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/config.py +0 -0
  57. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/extension/__init__.py +0 -0
  58. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/extension/query_sigma_zip.py +0 -0
  59. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/extension/story.py +0 -0
  60. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/extension_helpers.py +0 -0
  61. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/extensions.py +0 -0
  62. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/output.py +0 -0
  63. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/utils.py +0 -0
  64. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/version.py +0 -0
  65. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli.egg-info/dependency_links.txt +0 -0
  66. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli.egg-info/entry_points.txt +0 -0
  67. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli.egg-info/requires.txt +0 -0
  68. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli.egg-info/top_level.txt +0 -0
  69. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/tests/test_enrich_live.py +0 -0
  70. {gulp_cli-1.1.8 → gulp_cli-1.1.10}/tests/test_version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gulp-cli
3
- Version: 1.1.8
3
+ Version: 1.1.10
4
4
  Summary: Command-line client for gULP
5
5
  Author-email: Mentat <info@mentat.is>
6
6
  Requires-Python: >=3.12
@@ -22,7 +22,7 @@ Dynamic: license-file
22
22
  ## ✨ What can you do?
23
23
 
24
24
  - 🔐 **Authentication** — secure login with token persistence
25
- - 📥 **Ingestion** — ingest files (single/batch/wildcard), zip archives, with concurrent uploads
25
+ - 📥 **Ingestion** — ingest files (single/batch/wildcard), optionally compressed before upload, with concurrent uploads
26
26
  - 🔍 **Querying** — raw OpenSearch queries, Sigma rules, external plugins
27
27
  - 🏷️ **Enrichment** — enrich documents, tag/untag, update fields
28
28
  - 👥 **User Management** — create users, manage permissions (admin only)
@@ -5,7 +5,7 @@
5
5
  ## ✨ What can you do?
6
6
 
7
7
  - 🔐 **Authentication** — secure login with token persistence
8
- - 📥 **Ingestion** — ingest files (single/batch/wildcard), zip archives, with concurrent uploads
8
+ - 📥 **Ingestion** — ingest files (single/batch/wildcard), optionally compressed before upload, with concurrent uploads
9
9
  - 🔍 **Querying** — raw OpenSearch queries, Sigma rules, external plugins
10
10
  - 🏷️ **Enrichment** — enrich documents, tag/untag, update fields
11
11
  - 👥 **User Management** — create users, manage permissions (admin only)
@@ -461,7 +461,7 @@ gulp-cli ingest file OPERATION_ID PLUGIN [FILE...] [OPTIONS]
461
461
  **Options:**
462
462
 
463
463
  - `--context TEXT` — Context for ingestion, specify a name to create a new context if it doesn't exist, or an existing `context_id` (default: `sdk_context`)
464
- - `--plugin-params TEXT` — JSON string with plugin parameters
464
+ - `--plugin-params TEXT` — JSON string with plugin parameters. When it includes `"compressed": true`, gulp-cli bzip2-compresses each input file before upload and the backend decompresses it before plugin ingestion.
465
465
  - `--flt TEXT` — JSON object for `GulpIngestionFilter`
466
466
  - `--paths-file PATH` — Text file with one file or glob pattern per line. When set, positional `FILE` arguments are optional and ignored if also provided.
467
467
  - `--reset-operation` — Delete and recreate the operation before ingest starts
@@ -493,6 +493,9 @@ gulp-cli ingest file my_op win_evtx --paths-file /tmp/file_paths.txt
493
493
  # With plugin parameters
494
494
  gulp-cli ingest file my_op csv file.csv --plugin-params '{"delimiter":";","encoding":"utf-8"}'
495
495
 
496
+ # Compress before upload and let the backend decompress before ingestion
497
+ gulp-cli ingest file my_op win_evtx /path/to/System.evtx --plugin-params '{"compressed": true}'
498
+
496
499
  # Preview mode (no ingestion persisted)
497
500
  gulp-cli ingest file my_op win_evtx /path/to/System.evtx --preview
498
501
 
@@ -521,7 +524,7 @@ gulp-cli ingest file-to-source SOURCE_ID [FILE...] [OPTIONS]
521
524
  **Options:**
522
525
 
523
526
  - `--plugin TEXT` — Override the plugin associated with the source (requires `--plugin-params`)
524
- - `--plugin-params TEXT` — JSON object for plugin_params (overrides source defaults; required when `--plugin` is set, `{}` is allowed)
527
+ - `--plugin-params TEXT` — JSON object for plugin_params (overrides source defaults; required when `--plugin` is set, `{}` is allowed). When it includes `"compressed": true`, gulp-cli bzip2-compresses each input file before upload and the backend decompresses it before plugin ingestion.
525
528
  - `--flt TEXT` — JSON object for GulpIngestionFilter
526
529
  - `--paths-file PATH` — Text file with one file or glob pattern per line. When set, positional `FILE` arguments are optional and ignored if also provided.
527
530
  - `--wait` — Wait for completion with progress
@@ -536,38 +539,7 @@ gulp-cli ingest file-to-source source123 /new/System.evtx --wait
536
539
  gulp-cli ingest file-to-source source123 '/new/*.evtx'
537
540
  gulp-cli ingest file-to-source source123 --paths-file /tmp/file_paths.txt
538
541
  gulp-cli ingest file-to-source source123 /new/events.json --plugin json --plugin-params '{"mapping_parameters": {}}'
539
- ```
540
-
541
- ---
542
-
543
- #### `zip`
544
-
545
- Ingest from a ZIP archive.
546
-
547
- > TO BE DEPRECATED...
548
-
549
- ```bash
550
- gulp-cli ingest zip OPERATION_ID ZIP_FILE [OPTIONS]
551
- ```
552
-
553
- **Arguments:**
554
-
555
- - `OPERATION_ID` — Target operation
556
- - `ZIP_FILE` — Path to ZIP file containing a `metadata.json` in the root, describing the content as specified in gulp's `ingest_zip` docs.
557
-
558
- **Options:**
559
-
560
- - `--context TEXT` — Context for ingestion, specify a name to create a new context if it doesn't exist, or an existing `context_id` (default: `sdk_context`)
561
- - `--flt TEXT` — JSON object for `GulpIngestionFilter`
562
- - `--create-operation` — Create operation automatically when it does not exist
563
- - `--wait` — Wait for completion
564
- - `--timeout INTEGER` — Timeout in seconds for `--wait` mode
565
-
566
- **Examples:**
567
-
568
- ```bash
569
- gulp-cli ingest zip my_op /data/evidence.zip --wait
570
- gulp-cli ingest zip my_op /data/evidence.zip --create-operation
542
+ gulp-cli ingest file-to-source source123 /new/System.evtx --plugin win_evtx --plugin-params '{"compressed": true}'
571
543
  ```
572
544
 
573
545
  ---
@@ -2330,32 +2302,6 @@ gulp-cli plugin list-ui [OPTIONS]
2330
2302
 
2331
2303
  ---
2332
2304
 
2333
- #### `plugin upload`
2334
-
2335
- Upload a new plugin.
2336
-
2337
- ```bash
2338
- gulp-cli plugin upload PLUGIN_FILE [OPTIONS]
2339
- ```
2340
-
2341
- #### `plugin download`
2342
-
2343
- Download a plugin.
2344
-
2345
- ```bash
2346
- gulp-cli plugin download FILENAME OUTPUT_PATH [OPTIONS]
2347
- ```
2348
-
2349
- #### `plugin delete`
2350
-
2351
- Delete a plugin.
2352
-
2353
- ```bash
2354
- gulp-cli plugin delete FILENAME [OPTIONS]
2355
- ```
2356
-
2357
- ---
2358
-
2359
2305
  #### `mapping list`
2360
2306
 
2361
2307
  List all mapping files.
@@ -8,7 +8,7 @@
8
8
  - [CSV Data Ingestion with Custom Parameters](#csv-data-ingestion-with-custom-parameters)
9
9
  - [JSON Logs Ingestion](#json-logs-ingestion)
10
10
  - [Add More Evidence to Existing Source](#add-more-evidence-to-existing-source)
11
- - [ZIP Archive Ingestion](#zip-archive-ingestion)
11
+ - [Compressed File Ingestion](#compressed-file-ingestion)
12
12
  - [Create ZIP Archive from Paths and Masks](#create-zip-archive-from-paths-and-masks)
13
13
  - [Raw Payload Ingestion](#raw-payload-ingestion)
14
14
  - [Request Stats Monitoring Workflows](#request-stats-monitoring-workflows)
@@ -205,14 +205,12 @@ gulp-cli ingest file-to-source data-2026-001 /additional/evidence.evtx --wait
205
205
  gulp-cli ingest file-to-source data-2026-001 '/additional/*.evtx' --wait
206
206
  ```
207
207
 
208
- ### ZIP Archive Ingestion
208
+ ### Compressed File Ingestion
209
209
 
210
210
  ```bash
211
- # Ingest prepared ZIP evidence archive
212
- gulp-cli ingest zip incident-001 /evidence/evidence.zip --wait
213
-
214
- # Auto-create operation when missing
215
- gulp-cli ingest zip incident-001 /evidence/evidence.zip --create-operation
211
+ # Compress files with bzip2 before upload; the backend decompresses before ingestion
212
+ gulp-cli ingest file incident-001 win_evtx /evidence/System.evtx \
213
+ --plugin-params '{"compressed": true}' --wait
216
214
  ```
217
215
 
218
216
  ### Create ZIP Archive from Paths and Masks
@@ -233,9 +231,6 @@ $CASE_ROOT/linux/**/*.log
233
231
  EOF
234
232
 
235
233
  gulp-cli ingest zip-create '$CASE_ROOT/evidence.zip' --paths-file /tmp/evidence_paths.txt --overwrite
236
-
237
- # Then ingest the generated ZIP
238
- gulp-cli ingest zip incident-001 '$CASE_ROOT/evidence.zip' --wait
239
234
  ```
240
235
 
241
236
  ### Raw Payload Ingestion
@@ -207,11 +207,11 @@ This shows a real-time progress bar while documents are being ingested. Per-file
207
207
  gulp-cli ingest file-to-source existing-source-id /gulp/samples/win_evtx/Security.evtx --wait
208
208
  ```
209
209
 
210
- ### Ingest ZIP / Raw Data
210
+ ### Compressed / Raw Data
211
211
 
212
212
  ```bash
213
- # ZIP archive ingestion
214
- gulp-cli ingest zip my_investigation /path/to/evidence.zip --wait
213
+ # Compress locally with bzip2 before upload; the backend decompresses before ingestion
214
+ gulp-cli ingest file my_investigation win_evtx /path/to/System.evtx --plugin-params '{"compressed": true}' --wait
215
215
 
216
216
  # Raw payload ingestion from a file
217
217
  gulp-cli ingest raw my_investigation --data-file /tmp/raw_chunk.json --last --wait
@@ -196,58 +196,6 @@ List available UI plugins:
196
196
  gulp plugin list-ui
197
197
  ```
198
198
 
199
- ### Upload Plugin
200
-
201
- Upload a custom plugin:
202
-
203
- ```bash
204
- # Upload as default plugin
205
- gulp plugin upload /path/to/my_plugin.py
206
-
207
- # Upload as extension plugin
208
- gulp plugin upload /path/to/my_extension.py --type extension
209
-
210
- # Upload as UI plugin
211
- gulp plugin upload /path/to/my_ui_plugin.py --type ui
212
-
213
- # Fail if already exists
214
- gulp plugin upload /path/to/my_plugin.py --fail-if-exists
215
- ```
216
-
217
- Response includes the file path where the plugin was saved on the server.
218
-
219
- ### Download Plugin
220
-
221
- Download a plugin from the server:
222
-
223
- ```bash
224
- # Download default plugin
225
- gulp plugin download win_evtx.py /local/path/win_evtx.py
226
-
227
- # Download extension plugin
228
- gulp plugin download my_extension.py /path/to/save --type extension
229
-
230
- # Download UI plugin
231
- gulp plugin download my_ui.py /path/to/save --type ui
232
- ```
233
-
234
- ### Delete Plugin
235
-
236
- Delete a plugin from the server:
237
-
238
- ```bash
239
- # Delete default plugin
240
- gulp plugin delete my_plugin.py
241
-
242
- # Delete extension plugin
243
- gulp plugin delete my_extension.py --type extension
244
-
245
- # Delete UI plugin
246
- gulp plugin delete my_ui.py --type ui
247
- ```
248
-
249
- ---
250
-
251
199
  ## Mapping File Management
252
200
 
253
201
  Mapping files define data transformations and field mappings for ingestion plugins.
@@ -0,0 +1,125 @@
1
+ # Stdout Markers Cheat Sheet
2
+
3
+ Marker lines are emitted as one unwrapped stdout line:
4
+
5
+ ```text
6
+ GULP_MARKER: [MARKER_NAME] | {"json": "payload"}
7
+ ```
8
+
9
+ Parser rule: match lines starting with `GULP_MARKER: `, split once on ` | `, then JSON-decode the right side.
10
+
11
+ ## Ingest `--wait-log`
12
+
13
+ These markers are emitted by `ingest file --wait-log`, `ingest file-to-source --wait-log`, and `ingest raw --wait-log`.
14
+
15
+ ### `[MARKER_INGEST_SOURCE_DONE_RECEIVED]`
16
+
17
+ Emitted when the backend sends `INGEST_SOURCE_DONE`.
18
+
19
+ Payload:
20
+ - `req_id`: backend request id.
21
+ - `file`: display label for the file/request.
22
+ - `status`: status from the source-done packet or current state.
23
+ - `ingested`: accumulated ingested record count.
24
+ - `skipped`: accumulated skipped record count.
25
+ - `failed`: accumulated failed record count.
26
+ - `errors`: extracted backend errors, usually an array of strings.
27
+
28
+ ### `[MARKER_ONGOING_STATS_RECEIVED]`
29
+
30
+ Emitted for `STATS_CREATE` or `STATS_UPDATE` while status is not `done`, `failed`, or `canceled`.
31
+
32
+ Payload:
33
+ - `req_id`: backend request id.
34
+ - `file`: display label for the file/request.
35
+ - `event`: websocket event name, usually `STATS_CREATE` or `STATS_UPDATE`.
36
+ - `status`: current stats status.
37
+ - `ingested`: current authoritative ingested count.
38
+ - `skipped`: current authoritative skipped count.
39
+ - `failed`: current authoritative failed count.
40
+ - `pct`: ingest percentage when provided by the backend, otherwise `null`.
41
+ - `errors`: extracted backend errors, usually an array of strings.
42
+
43
+ ### `[MARKER_DONE_STATS_RECEIVED]`
44
+
45
+ Emitted for `STATS_CREATE` or `STATS_UPDATE` when status is `done`.
46
+
47
+ Payload: same fields as `[MARKER_ONGOING_STATS_RECEIVED]`.
48
+
49
+ ### `[MARKER_FAILED_STATS_RECEIVED]`
50
+
51
+ Emitted for `STATS_CREATE` or `STATS_UPDATE` when status is `failed` or `canceled`.
52
+
53
+ Also emitted after a backend websocket `ERROR` packet.
54
+
55
+ Payload:
56
+ - From stats packets: same fields as `[MARKER_ONGOING_STATS_RECEIVED]`.
57
+ - From `ERROR` packets: `req_id`, `file`, `event`, `status`, `ingested`, `skipped`, `failed`, `errors`.
58
+
59
+ ### `[MARKER_BACKEND_EXCEPTION_REPORTED]`
60
+
61
+ Emitted when the backend sends websocket `ERROR`.
62
+
63
+ Payload:
64
+ - `req_id`: backend request id.
65
+ - `file`: display label for the file/request.
66
+ - `event`: websocket event name, `ERROR`.
67
+ - `status`: always set to `failed` by the CLI for this request.
68
+ - `errors`: extracted backend errors, usually an array of strings.
69
+
70
+ ### `[MARKER_INGESTION_FINISHED]`
71
+
72
+ Emitted once after wait-log completion, before the final CLI result JSON/table output.
73
+
74
+ Payload:
75
+ - `requests_total`: number of request results.
76
+ - `requests_done`: count with status `done`.
77
+ - `requests_failed`: count with status `failed`.
78
+ - `requests_canceled`: count with status `canceled`.
79
+ - `requests_timeout`: count with status `timeout`.
80
+ - `ingested`: accumulated ingested record count.
81
+ - `skipped`: accumulated skipped record count.
82
+ - `failed`: accumulated failed record count.
83
+
84
+ ## `ingest zip-create`
85
+
86
+ These markers are emitted by local ZIP creation.
87
+
88
+ ### `[MARKER_FILE_ADDED_TO_ZIP]`
89
+
90
+ Emitted after each ZIP entry is written.
91
+
92
+ Payload:
93
+ - `zip`: requested output ZIP path.
94
+ - `entry`: ZIP entry name.
95
+ - `source`: source filesystem path for the entry.
96
+ - `file_size`: uncompressed entry size in bytes.
97
+ - `compress_size`: compressed entry size in bytes.
98
+ - `current`: 1-based count of entries added so far.
99
+ - `total`: total entries planned for the ZIP.
100
+ - `percent`: integer progress percentage.
101
+
102
+ ### `[MARKER_ZIP_CREATED_SUCCESSFULLY]`
103
+
104
+ Emitted once after the ZIP or multipart ZIP volumes are published.
105
+
106
+ Payload:
107
+ - `zip_files`: array of created archive paths.
108
+ - `files_archived`: number of source files archived. Directory entries are not counted here.
109
+ - `entries_archived`: number of ZIP entries archived, including directory entries.
110
+
111
+ ### `[MARKER_ZIP_CREATE_ERROR]`
112
+
113
+ Emitted when ZIP creation hits a validation, scan, write, or publish error.
114
+
115
+ Payload variants:
116
+ - Scan/write skip errors: `path`, `zip`, `error`.
117
+ - Top-level `zip-create` command errors: `zip`, `error`.
118
+
119
+ ### `[MARKER_OTHER_ERROR]`
120
+
121
+ Emitted with top-level `zip-create` command exceptions after `[MARKER_ZIP_CREATE_ERROR]`.
122
+
123
+ Payload:
124
+ - `command`: currently `zip-create`.
125
+ - `error`: exception text.
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.1.8'
22
- __version_tuple__ = version_tuple = (1, 1, 8)
21
+ __version__ = version = '1.1.10'
22
+ __version_tuple__ = version_tuple = (1, 1, 10)
23
23
 
24
- __commit_id__ = commit_id = 'g6f1fa3720'
24
+ __commit_id__ = commit_id = 'g015adf27b'