Void2377 commited on
Commit
cf7be65
·
verified ·
1 Parent(s): 88b3119

initial plugin catalog: notes / counter / expense

Browse files
README.md ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # tool-neuron-plugins
2
+
3
+ Public catalog of plugin bundles consumed by the ToolNeuron Android app.
4
+
5
+ The app reads `plugins.json` from this repo on every refresh and lists the
6
+ plugins it advertises. When the user installs a plugin, the app downloads the
7
+ zip at `download`, verifies `sha256`, extracts it into the plugin store, and
8
+ deletes the zip.
9
+
10
+ ## Layout
11
+
12
+ ```
13
+ plugins.json
14
+ plugins/<id>/<version>/<name>.zip
15
+ ```
16
+
17
+ Each zip contains:
18
+
19
+ - `manifest.json` — id, version, apiVersion, entryClass, capabilities, hasNativeCode
20
+ - `classes*.dex` — plugin code (multidex supported)
21
+ - `lib/<abi>/*.so` — optional native libraries (only when `hasNativeCode: true`)
22
+
23
+ ## Adding a plugin
24
+
25
+ 1. Build the plugin module (`./gradlew :plugins:<name>:packagePlugin`)
26
+ 2. Drop the zip under `plugins/<id>/<version>/`
27
+ 3. Add an entry to `plugins.json` with `size` and `sha256`
28
+ 4. `hf upload Void2377/tool-neuron-plugins . .`
29
+
30
+ The schema versions itself via `schemaVersion`; the app refuses to parse
31
+ catalogs whose `schemaVersion` is newer than it understands.
plugins.json ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schemaVersion": 1,
3
+ "updatedAt": "2026-05-11T00:00:00Z",
4
+ "plugins": [
5
+ {
6
+ "id": "com.dark.plugins.notes",
7
+ "version": "1.0.0",
8
+ "apiVersion": 1,
9
+ "name": "Notes",
10
+ "description": "Quick sticky notes saved to encrypted storage.",
11
+ "author": "darkbyte",
12
+ "initial": "N",
13
+ "capabilities": ["hxs.read", "hxs.write"],
14
+ "hasNativeCode": false,
15
+ "download": "plugins/com.dark.plugins.notes/1.0.0/notes.zip",
16
+ "size": 811606,
17
+ "sha256": "993c00a3a42935f8c1df7319456e49ae4a6ac23b5bf8cca0edb42a1dd8b09402"
18
+ },
19
+ {
20
+ "id": "com.dark.plugins.counter",
21
+ "version": "1.0.0",
22
+ "apiVersion": 1,
23
+ "name": "Counter",
24
+ "description": "A simple counter with smooth number transitions. Demonstrates plugin state persistence.",
25
+ "author": "darkbyte",
26
+ "initial": "C",
27
+ "capabilities": ["hxs.read", "hxs.write"],
28
+ "hasNativeCode": false,
29
+ "download": "plugins/com.dark.plugins.counter/1.0.0/counter.zip",
30
+ "size": 792190,
31
+ "sha256": "5ea9f34c91ffab74c4586775c22a8be985ebad9d281506efde8deac8401ba1f6"
32
+ },
33
+ {
34
+ "id": "com.dark.plugins.expense",
35
+ "version": "1.0.0",
36
+ "apiVersion": 1,
37
+ "name": "Expense Tracker",
38
+ "description": "Privacy-first expense tracking with AI auto-categorization. All data encrypted locally.",
39
+ "author": "darkbyte",
40
+ "initial": "$",
41
+ "capabilities": ["hxs.read", "hxs.write", "ai.onnx"],
42
+ "hasNativeCode": false,
43
+ "download": "plugins/com.dark.plugins.expense/1.0.0/expense.zip",
44
+ "size": 17187181,
45
+ "sha256": "b49f5b7f06a38be09ccb964dce160d31535e54c93f04c5e150a6072a49fb1bd0"
46
+ }
47
+ ]
48
+ }
plugins/com.dark.plugins.counter/1.0.0/counter.zip ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5ea9f34c91ffab74c4586775c22a8be985ebad9d281506efde8deac8401ba1f6
3
+ size 792190
plugins/com.dark.plugins.expense/1.0.0/expense.zip ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b49f5b7f06a38be09ccb964dce160d31535e54c93f04c5e150a6072a49fb1bd0
3
+ size 17187181
plugins/com.dark.plugins.notes/1.0.0/notes.zip ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:993c00a3a42935f8c1df7319456e49ae4a6ac23b5bf8cca0edb42a1dd8b09402
3
+ size 811606