abbu 0.8.1 → 0.18.0
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.
- checksums.yaml +4 -4
- data/README.md +129 -2
- data/bin/abbu +158 -6
- data/bin/abbu-mcp +36 -0
- data/docs/ABBU.md +28 -0
- data/docs/ALTERNATE_CALENDAR_EVIDENCE.md +82 -0
- data/docs/CHANGELOG.md +98 -0
- data/docs/CONTRIBUTING.md +3 -0
- data/docs/FUZZY_MATCHING.md +72 -0
- data/docs/HISTORY_EVIDENCE.md +98 -0
- data/docs/ICALENDAR.md +101 -0
- data/docs/MACHINE_JSON.md +128 -0
- data/docs/MCP.md +148 -0
- data/docs/MERGE_PLANS.md +78 -0
- data/docs/MY_CARD_EVIDENCE.md +92 -0
- data/docs/PORTABLE_SQLITE.md +142 -0
- data/docs/RELEASING.md +76 -68
- data/docs/SNAPSHOT_DIFF.md +74 -0
- data/docs/SNAPSHOT_HISTORY.md +93 -0
- data/docs/STREAMING.md +73 -0
- data/docs/TODO.md +4 -4
- data/docs/WRITER_DECISION.md +90 -0
- data/lib/abbu/archive.rb +14 -0
- data/lib/abbu/exporters/csv_exporter.rb +7 -0
- data/lib/abbu/exporters/icalendar_encoding.rb +35 -0
- data/lib/abbu/exporters/icalendar_event.rb +61 -0
- data/lib/abbu/exporters/icalendar_exporter.rb +86 -0
- data/lib/abbu/exporters/json_exporter.rb +2 -2
- data/lib/abbu/exporters/jsonl_exporter.rb +23 -0
- data/lib/abbu/exporters/sqlite_exporter.rb +85 -0
- data/lib/abbu/exporters/sqlite_rows.rb +113 -0
- data/lib/abbu/exporters/sqlite_schema.rb +76 -0
- data/lib/abbu/exporters/vcard_exporter.rb +10 -11
- data/lib/abbu/exporters/vcard_photo.rb +50 -0
- data/lib/abbu/history_tracker.rb +96 -0
- data/lib/abbu/live_store.rb +11 -0
- data/lib/abbu/machine_command.rb +159 -0
- data/lib/abbu/machine_output.rb +52 -0
- data/lib/abbu/mcp/read_session.rb +57 -0
- data/lib/abbu/mcp/server.rb +100 -0
- data/lib/abbu/mcp.rb +11 -0
- data/lib/abbu/merge_plan.rb +132 -0
- data/lib/abbu/merge_preview.rb +35 -0
- data/lib/abbu/merge_values.rb +26 -0
- data/lib/abbu/parsers/plist_parser.rb +9 -0
- data/lib/abbu/parsers/sqlite_parser.rb +25 -0
- data/lib/abbu/snapshot_diff.rb +125 -0
- data/lib/abbu/snapshot_history.rb +66 -0
- data/lib/abbu/utils/fuzzy_matcher.rb +116 -0
- data/lib/abbu/version.rb +1 -1
- data/lib/abbu.rb +9 -0
- data/sig/fuzzy_matcher.rbs +22 -0
- data/sig/icalendar_exporter.rbs +13 -0
- data/sig/machine_output.rbs +23 -0
- data/sig/mcp.rbs +19 -0
- data/sig/merge_plan.rbs +16 -0
- data/sig/snapshot_diff.rbs +8 -0
- data/sig/snapshot_history.rbs +10 -0
- data/sig/sqlite_exporter.rbs +10 -0
- data/sig/streaming.rbs +27 -0
- data/sig/vcard_exporter.rbs +1 -1
- metadata +46 -2
data/sig/merge_plan.rbs
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# sig/merge_plan.rbs
|
|
2
|
+
module Abbu
|
|
3
|
+
class MergePlan
|
|
4
|
+
attr_reader policy: Symbol?
|
|
5
|
+
attr_reader fields: Hash[Symbol, untyped]
|
|
6
|
+
attr_reader sources: Array[untyped]
|
|
7
|
+
attr_reader conflicts: Hash[Symbol, untyped]
|
|
8
|
+
def initialize: (Contact left, Contact right, ?policy: Symbol?, ?source: String?) -> void
|
|
9
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
10
|
+
def materialize: () -> Contact
|
|
11
|
+
end
|
|
12
|
+
class MergePreview
|
|
13
|
+
def self.validate!: (Hash[Symbol, untyped] options) -> void
|
|
14
|
+
def self.plans: (Array[Contact] contacts, ?policy: Symbol?, ?source: String?) -> Array[Hash[Symbol, untyped]]
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# sig/snapshot_diff.rbs
|
|
2
|
+
module Abbu
|
|
3
|
+
class SnapshotDiff
|
|
4
|
+
def initialize: (Archive | LiveStore | Enumerable[Contact] before, Archive | LiveStore | Enumerable[Contact] after, ?max_pairs: Integer) -> void
|
|
5
|
+
attr_reader result: Hash[Symbol, untyped]
|
|
6
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
7
|
+
end
|
|
8
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# sig/snapshot_history.rbs
|
|
2
|
+
module Abbu
|
|
3
|
+
class SnapshotHistory
|
|
4
|
+
include Enumerable[Hash[Symbol, untyped]]
|
|
5
|
+
def initialize: (Enumerable[String] paths, ?strict: bool, ?retention: Integer, ?limits: Hash[Symbol, Integer]) -> void
|
|
6
|
+
def self.from_directory: (String path, **untyped options) -> SnapshotHistory
|
|
7
|
+
def each: () { (Hash[Symbol, untyped]) -> void } -> SnapshotHistory
|
|
8
|
+
| () -> Enumerator[Hash[Symbol, untyped], SnapshotHistory]
|
|
9
|
+
end
|
|
10
|
+
end
|
data/sig/streaming.rbs
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# sig/streaming.rbs
|
|
2
|
+
module Abbu
|
|
3
|
+
class Archive
|
|
4
|
+
def each_contact: () -> Enumerator[Contact, untyped]
|
|
5
|
+
| () { (Contact) -> void } -> self
|
|
6
|
+
end
|
|
7
|
+
class LiveStore
|
|
8
|
+
def each_contact: () -> Enumerator[Contact, untyped]
|
|
9
|
+
| () { (Contact) -> void } -> self
|
|
10
|
+
end
|
|
11
|
+
module Exporters
|
|
12
|
+
class JsonExporter
|
|
13
|
+
end
|
|
14
|
+
class CsvExporter
|
|
15
|
+
def write_to: (IO | StringIO io) -> nil
|
|
16
|
+
end
|
|
17
|
+
class VcardExporter
|
|
18
|
+
def write_to: (IO | StringIO io) -> nil
|
|
19
|
+
end
|
|
20
|
+
class JsonlExporter < JsonExporter
|
|
21
|
+
def initialize: (Enumerable[Contact] contacts) -> void
|
|
22
|
+
def write_to: (IO | StringIO io) -> nil
|
|
23
|
+
def to_file: (String | Pathname path) -> nil
|
|
24
|
+
def to_stdout: () -> nil
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
data/sig/vcard_exporter.rbs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
module Abbu
|
|
3
3
|
module Exporters
|
|
4
4
|
class VcardExporter
|
|
5
|
-
def initialize: (Enumerable[Contact] contacts) -> void
|
|
5
|
+
def initialize: (Enumerable[Contact] contacts, ?photo_mode: :uri | :embedded) -> void
|
|
6
6
|
def to_file: (String | Pathname path) -> Integer
|
|
7
7
|
def to_stdout: () -> nil
|
|
8
8
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: abbu
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.18.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Stan Carver II
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-10-
|
|
11
|
+
date: 2026-10-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: sqlite3
|
|
@@ -213,19 +213,34 @@ email:
|
|
|
213
213
|
- stan@a1webconsulting.com
|
|
214
214
|
executables:
|
|
215
215
|
- abbu
|
|
216
|
+
- abbu-mcp
|
|
216
217
|
extensions: []
|
|
217
218
|
extra_rdoc_files: []
|
|
218
219
|
files:
|
|
219
220
|
- LICENSE
|
|
220
221
|
- README.md
|
|
221
222
|
- bin/abbu
|
|
223
|
+
- bin/abbu-mcp
|
|
222
224
|
- docs/ABBU.md
|
|
225
|
+
- docs/ALTERNATE_CALENDAR_EVIDENCE.md
|
|
223
226
|
- docs/API_STABILITY.md
|
|
224
227
|
- docs/CHANGELOG.md
|
|
225
228
|
- docs/CONTRIBUTING.md
|
|
226
229
|
- docs/FORMAT_COMPATIBILITY.md
|
|
230
|
+
- docs/FUZZY_MATCHING.md
|
|
231
|
+
- docs/HISTORY_EVIDENCE.md
|
|
232
|
+
- docs/ICALENDAR.md
|
|
233
|
+
- docs/MACHINE_JSON.md
|
|
234
|
+
- docs/MCP.md
|
|
235
|
+
- docs/MERGE_PLANS.md
|
|
236
|
+
- docs/MY_CARD_EVIDENCE.md
|
|
237
|
+
- docs/PORTABLE_SQLITE.md
|
|
227
238
|
- docs/RELEASING.md
|
|
239
|
+
- docs/SNAPSHOT_DIFF.md
|
|
240
|
+
- docs/SNAPSHOT_HISTORY.md
|
|
241
|
+
- docs/STREAMING.md
|
|
228
242
|
- docs/TODO.md
|
|
243
|
+
- docs/WRITER_DECISION.md
|
|
229
244
|
- examples/deduplicate_contacts.rb
|
|
230
245
|
- examples/export_to_api.rb
|
|
231
246
|
- examples/export_to_csv.rb
|
|
@@ -238,31 +253,60 @@ files:
|
|
|
238
253
|
- lib/abbu/contact.rb
|
|
239
254
|
- lib/abbu/diagnostic.rb
|
|
240
255
|
- lib/abbu/exporters/csv_exporter.rb
|
|
256
|
+
- lib/abbu/exporters/icalendar_encoding.rb
|
|
257
|
+
- lib/abbu/exporters/icalendar_event.rb
|
|
258
|
+
- lib/abbu/exporters/icalendar_exporter.rb
|
|
241
259
|
- lib/abbu/exporters/json_exporter.rb
|
|
260
|
+
- lib/abbu/exporters/jsonl_exporter.rb
|
|
261
|
+
- lib/abbu/exporters/sqlite_exporter.rb
|
|
262
|
+
- lib/abbu/exporters/sqlite_rows.rb
|
|
263
|
+
- lib/abbu/exporters/sqlite_schema.rb
|
|
242
264
|
- lib/abbu/exporters/vcard_document.rb
|
|
243
265
|
- lib/abbu/exporters/vcard_encoding.rb
|
|
244
266
|
- lib/abbu/exporters/vcard_exporter.rb
|
|
267
|
+
- lib/abbu/exporters/vcard_photo.rb
|
|
245
268
|
- lib/abbu/group.rb
|
|
246
269
|
- lib/abbu/group_catalog.rb
|
|
270
|
+
- lib/abbu/history_tracker.rb
|
|
247
271
|
- lib/abbu/image_extractor.rb
|
|
248
272
|
- lib/abbu/live_store.rb
|
|
273
|
+
- lib/abbu/machine_command.rb
|
|
274
|
+
- lib/abbu/machine_output.rb
|
|
275
|
+
- lib/abbu/mcp.rb
|
|
276
|
+
- lib/abbu/mcp/read_session.rb
|
|
277
|
+
- lib/abbu/mcp/server.rb
|
|
278
|
+
- lib/abbu/merge_plan.rb
|
|
279
|
+
- lib/abbu/merge_preview.rb
|
|
280
|
+
- lib/abbu/merge_values.rb
|
|
249
281
|
- lib/abbu/parse_error.rb
|
|
250
282
|
- lib/abbu/parsers/plist_parser.rb
|
|
251
283
|
- lib/abbu/parsers/sqlite_parser.rb
|
|
252
284
|
- lib/abbu/query.rb
|
|
253
285
|
- lib/abbu/schema_inspector.rb
|
|
286
|
+
- lib/abbu/snapshot_diff.rb
|
|
287
|
+
- lib/abbu/snapshot_history.rb
|
|
254
288
|
- lib/abbu/source.rb
|
|
255
289
|
- lib/abbu/source_catalog.rb
|
|
256
290
|
- lib/abbu/timestamp_range.rb
|
|
257
291
|
- lib/abbu/utils/contact_identity.rb
|
|
258
292
|
- lib/abbu/utils/deduplicator.rb
|
|
293
|
+
- lib/abbu/utils/fuzzy_matcher.rb
|
|
259
294
|
- lib/abbu/utils/image_resolver.rb
|
|
260
295
|
- lib/abbu/utils/label_normalizer.rb
|
|
261
296
|
- lib/abbu/utils/source_descriptor.rb
|
|
262
297
|
- lib/abbu/version.rb
|
|
298
|
+
- sig/fuzzy_matcher.rbs
|
|
263
299
|
- sig/group.rbs
|
|
300
|
+
- sig/icalendar_exporter.rbs
|
|
301
|
+
- sig/machine_output.rbs
|
|
302
|
+
- sig/mcp.rbs
|
|
303
|
+
- sig/merge_plan.rbs
|
|
264
304
|
- sig/query.rbs
|
|
305
|
+
- sig/snapshot_diff.rbs
|
|
306
|
+
- sig/snapshot_history.rbs
|
|
265
307
|
- sig/source.rbs
|
|
308
|
+
- sig/sqlite_exporter.rbs
|
|
309
|
+
- sig/streaming.rbs
|
|
266
310
|
- sig/vcard_exporter.rbs
|
|
267
311
|
- tasks/abbu.rake
|
|
268
312
|
homepage: https://github.com/scarver2/abbu
|