AT Protocol utilities for Alfred: search users, resolve identities, view PLC logs and lexicons via pds.ls.
1{
2 "bundleid": "com.jeherve.pdsls",
3 "name": "PDSls",
4 "description": "AT Protocol utilities — search users, resolve identities, view PLC logs and lexicons via pds.ls",
5 "createdby": "Jeremy Herve",
6 "webaddress": "https://pds.ls",
7 "version": "1.0.0",
8 "readme": "AT Protocol utilities for Alfred, integrating with pds.ls.\n\nKeywords:\n pdsearch {query} Search Bluesky profiles\n pdresolve {query} Resolve a DID or handle\n pdplc {query} View the PLC operation log for a did:plc\n pdlex {nsid} View a lexicon schema (e.g. app.bsky.feed.post)\n\nActions on any result: ⏎ open in pds.ls · ⌘ copy DID/JSON · ⌥ copy secondary · ⇧ Quick Look detail.\n\nRequires Node.js on PATH (Homebrew /opt/homebrew/bin or nvm are auto-detected).",
9 "variables": {},
10 "variablesdontexport": [],
11 "connections": {
12 "SF_SEARCH": [
13 { "destinationuid": "DISPATCH", "modifiers": 0, "modifiersubtext": "", "vitoclose": false },
14 { "destinationuid": "DISPATCH", "modifiers": 1048576, "modifiersubtext": "", "vitoclose": false },
15 { "destinationuid": "DISPATCH", "modifiers": 524288, "modifiersubtext": "", "vitoclose": false }
16 ],
17 "SF_RESOLVE": [
18 { "destinationuid": "DISPATCH", "modifiers": 0, "modifiersubtext": "", "vitoclose": false },
19 { "destinationuid": "DISPATCH", "modifiers": 1048576, "modifiersubtext": "", "vitoclose": false },
20 { "destinationuid": "DISPATCH", "modifiers": 524288, "modifiersubtext": "", "vitoclose": false }
21 ],
22 "SF_PLC": [
23 { "destinationuid": "DISPATCH", "modifiers": 0, "modifiersubtext": "", "vitoclose": false },
24 { "destinationuid": "DISPATCH", "modifiers": 1048576, "modifiersubtext": "", "vitoclose": false },
25 { "destinationuid": "DISPATCH", "modifiers": 524288, "modifiersubtext": "", "vitoclose": false }
26 ],
27 "SF_LEX": [
28 { "destinationuid": "DISPATCH", "modifiers": 0, "modifiersubtext": "", "vitoclose": false },
29 { "destinationuid": "DISPATCH", "modifiers": 1048576, "modifiersubtext": "", "vitoclose": false },
30 { "destinationuid": "DISPATCH", "modifiers": 524288, "modifiersubtext": "", "vitoclose": false }
31 ]
32 },
33 "objects": [
34 {
35 "uid": "SF_SEARCH",
36 "type": "alfred.workflow.input.scriptfilter",
37 "version": 3,
38 "config": {
39 "alfredfiltersresults": false,
40 "argumenttype": 1,
41 "escaping": 102,
42 "keyword": "pdsearch",
43 "queuedelaycustom": 3,
44 "queuedelayimmediatelyinitially": true,
45 "queuedelaymode": 0,
46 "runningsubtext": "Searching profiles…",
47 "script": "export PATH=\"/opt/homebrew/bin:/usr/local/bin:$HOME/.nvm/current/bin:$PATH\"\ncommand -v node >/dev/null 2>&1 || export PATH=\"$(ls -d \"$HOME\"/.nvm/versions/node/*/bin 2>/dev/null | tail -1):$PATH\"\nexec node \"./dist/search.cjs\" \"$1\"",
48 "scriptargtype": 1,
49 "scriptfile": "",
50 "subtext": "Search Bluesky profiles and open in PDSls",
51 "title": "Search Users",
52 "type": 0,
53 "withspace": true
54 }
55 },
56 {
57 "uid": "SF_RESOLVE",
58 "type": "alfred.workflow.input.scriptfilter",
59 "version": 3,
60 "config": {
61 "alfredfiltersresults": false,
62 "argumenttype": 1,
63 "escaping": 102,
64 "keyword": "pdresolve",
65 "queuedelaycustom": 3,
66 "queuedelayimmediatelyinitially": true,
67 "queuedelaymode": 0,
68 "runningsubtext": "Resolving identity…",
69 "script": "export PATH=\"/opt/homebrew/bin:/usr/local/bin:$HOME/.nvm/current/bin:$PATH\"\ncommand -v node >/dev/null 2>&1 || export PATH=\"$(ls -d \"$HOME\"/.nvm/versions/node/*/bin 2>/dev/null | tail -1):$PATH\"\nexec node \"./dist/resolve.cjs\" \"$1\"",
70 "scriptargtype": 1,
71 "scriptfile": "",
72 "subtext": "Resolve a DID to a handle or vice versa",
73 "title": "Resolve Identity",
74 "type": 0,
75 "withspace": true
76 }
77 },
78 {
79 "uid": "SF_PLC",
80 "type": "alfred.workflow.input.scriptfilter",
81 "version": 3,
82 "config": {
83 "alfredfiltersresults": false,
84 "argumenttype": 1,
85 "escaping": 102,
86 "keyword": "pdplc",
87 "queuedelaycustom": 3,
88 "queuedelayimmediatelyinitially": true,
89 "queuedelaymode": 0,
90 "runningsubtext": "Fetching PLC log…",
91 "script": "export PATH=\"/opt/homebrew/bin:/usr/local/bin:$HOME/.nvm/current/bin:$PATH\"\ncommand -v node >/dev/null 2>&1 || export PATH=\"$(ls -d \"$HOME\"/.nvm/versions/node/*/bin 2>/dev/null | tail -1):$PATH\"\nexec node \"./dist/plc.cjs\" \"$1\"",
92 "scriptargtype": 1,
93 "scriptfile": "",
94 "subtext": "View the PLC operation log for a DID or handle",
95 "title": "PLC Operation Log",
96 "type": 0,
97 "withspace": true
98 }
99 },
100 {
101 "uid": "SF_LEX",
102 "type": "alfred.workflow.input.scriptfilter",
103 "version": 3,
104 "config": {
105 "alfredfiltersresults": false,
106 "argumenttype": 1,
107 "escaping": 102,
108 "keyword": "pdlex",
109 "queuedelaycustom": 3,
110 "queuedelayimmediatelyinitially": true,
111 "queuedelaymode": 0,
112 "runningsubtext": "Resolving lexicon…",
113 "script": "export PATH=\"/opt/homebrew/bin:/usr/local/bin:$HOME/.nvm/current/bin:$PATH\"\ncommand -v node >/dev/null 2>&1 || export PATH=\"$(ls -d \"$HOME\"/.nvm/versions/node/*/bin 2>/dev/null | tail -1):$PATH\"\nexec node \"./dist/lexicon.cjs\" \"$1\"",
114 "scriptargtype": 1,
115 "scriptfile": "",
116 "subtext": "View lexicon schema documentation (e.g. app.bsky.feed.post)",
117 "title": "View Lexicon",
118 "type": 0,
119 "withspace": true
120 }
121 },
122 {
123 "uid": "DISPATCH",
124 "type": "alfred.workflow.action.script",
125 "version": 2,
126 "config": {
127 "concurrently": false,
128 "escaping": 102,
129 "script": "case \"$pdsls_action\" in\n open) open \"$pdsls_value\" ;;\n copy) printf %s \"$pdsls_value\" | pbcopy ;;\nesac",
130 "scriptargtype": 1,
131 "scriptfile": "",
132 "type": 0
133 }
134 }
135 ],
136 "uidata": {
137 "SF_SEARCH": { "xpos": 60, "ypos": 40 },
138 "SF_RESOLVE": { "xpos": 60, "ypos": 170 },
139 "SF_PLC": { "xpos": 60, "ypos": 300 },
140 "SF_LEX": { "xpos": 60, "ypos": 430 },
141 "DISPATCH": { "xpos": 420, "ypos": 230 }
142 }
143}