ilml-plugin-linkedin 1.2.1 → 1.2.2

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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,28 @@
1
+ # Changelog
2
+
3
+ ## 1.2.2
4
+ - README polish based on real-user feedback:
5
+ - Cleaner top — removed the metadata bullet list (npm/tracker/license) that was the very first thing visitors saw on the npm page; now opens straight into "What it does"
6
+ - Removed the entire `Developer Notes` section — it was internal-only and not useful for end users (release process and architecture notes live in `CLAUDE.md` and the SDK's plugin spec)
7
+ - Clarified the `LINKEDIN_SEARCH_URL` instruction (no more raw URL parameters like `f_AL=true` — just "open LinkedIn → Jobs, set filters, copy URL")
8
+ - New **Author & contact** section with personal page, LinkedIn, and a **DigitalTwins.team** call-to-action for custom plugin development
9
+ - `CHANGELOG.md` is now shipped in the npm tarball (added to `package.json#files`), so the npm package page renders release notes next to the README
10
+ - New **Feedback & support** section in the README pointing at a dedicated **Support** node in iLiveMyLife (`0000019dde81b04f-2e534bb8ebad0000`) — users can write directly to the maintainer via the in-graph messenger or `ilml send` from the terminal
11
+
12
+ ## 1.2.1
13
+ - Documentation overhaul — `README.md` rewritten in English, split into **User Guide** (install, configure, run, update) and **Developer Notes** (release process, architecture, security checklist)
14
+ - Removed outdated `.env`-based user instructions — the plugin is now fully self-configuring via `ilml plugin install linkedin` + first-run prompts (or `ilml plugin config linkedin set KEY VALUE`)
15
+ - Added `CHANGELOG.md` (this file)
16
+ - Added `CLAUDE.md` — project-level guide for the AI assistant covering release process and key architecture pointers
17
+ - Added a `Releases` node in the iLiveMyLife graph for in-app release notifications
18
+
19
+ ## 1.2.0
20
+ - First public publish on npm as `ilml-plugin-linkedin`
21
+ - `src/config.mjs` refactored to use `getPluginConfig()` from `@ilivemylife/graph-sdk` v1.0.17
22
+ - Resolved configuration is merged into `process.env` so the rest of the codebase (16+ files reading `process.env.X`) keeps working unchanged
23
+ - The manual `LINKEDIN_NAME` bootstrap check is removed — schema validation in the SDK handles it
24
+ - Works in both **production** (`ilml linkedin <command>`) and **development** (`node run.mjs` with `.env` next to manifest), without any code changes between modes
25
+ - Bumped `@ilivemylife/graph-sdk` peer to `^1.0.17`
26
+ - `package.json` polish for npm publish — `author`, `license: UNLICENSED`, `keywords`, strict `files: ["dist", "ilml-plugin.json"]` whitelist
27
+ - `ilml-plugin.json` declares config via `config.sections[].fields[]` (richer manifest format supported by SDK 1.0.17): grouped fields with `label`, `hint`, types (`text`, `secret`, `path`, `nodeId`, `url`, `number`, `boolean`)
28
+ - All sensitive files (`.env`, `cookies.json`, raw sources, internal handoff docs, runtime data) excluded from the npm tarball via `.npmignore`
package/README.md CHANGED
@@ -2,12 +2,6 @@
2
2
 
3
3
  LinkedIn job-search and networking automation as a plugin for the [`ilml`](https://www.npmjs.com/package/@ilivemylife/graph-sdk) CLI.
4
4
 
5
- - **npm:** https://www.npmjs.com/package/ilml-plugin-linkedin
6
- - **Tracker / Releases (in iLiveMyLife):** open the **Releases** node inside the **LinkedIn Automation** project in your iLiveMyLife app
7
- - **License:** UNLICENSED — all rights reserved
8
-
9
- ---
10
-
11
5
  ## What it does
12
6
 
13
7
  A toolkit that drives LinkedIn from your machine via a real browser (Puppeteer + stealth), with results synced into your [iLiveMyLife](https://ilivemylife.io) knowledge graph:
@@ -94,7 +88,7 @@ ilml plugin config linkedin reset # wipe all; will re-promp
94
88
  | Data storage | `DATA_DIR` | no | Absolute path to a directory for the local DB / cookies. **Recommended** — keeps data outside the plugin install folder so it survives plugin updates. |
95
89
  | Apply bot | `City` | no | Default city for filters. Default: `Toronto`. |
96
90
  | | `MAX_APPLY_FOR_RUN` | no | Stop after this many applications per run. Default: `50`. |
97
- | | `LINKEDIN_SEARCH_URL` | no | Default LinkedIn jobs search URL with your filters (use `f_AL=true` for Easy Apply). |
91
+ | | `LINKEDIN_SEARCH_URL` | no | Default LinkedIn jobs search URL open LinkedIn → Jobs, set your filters, then make sure **Easy Apply** is on. Copy the resulting URL from the address bar and paste it here. |
98
92
  | Scouting | `LINKEDIN_SCOUT_URLS` | no | Comma-separated job search URLs to scan without applying. |
99
93
  | Resume / CV | `CV_TEXT`, `RESUME_PDF_URL`, `RESUME_FILENAME` | no | CV snippet, public PDF URL, suggested filename. Used in messages to recruiters. |
100
94
  | Funnel | `FUNNEL_USE_CUSTOM_MESSAGE` | no | Send a custom note with connection requests. Default: `false`. |
@@ -198,105 +192,28 @@ ilml plugin config linkedin reset
198
192
 
199
193
  To clean up the data directory (cookies, DBs), delete the folder you set as `DATA_DIR` manually.
200
194
 
201
- ---
202
-
203
- # Developer Notes
204
-
205
- > Single-developer project. The reference for plugin architecture and SDK contracts is the iLiveMyLife graph-sdk repo's [`PLUGINS.md`](https://github.com/iLiveMyLife/graph-sdk.iLiveMyLife.io/blob/main/PLUGINS.md). Most of what follows is just reminders for me when I come back to this in a few months.
206
-
207
- ## Layout
208
-
209
- ```
210
- ilml-plugin.json # manifest: name, version, commands, config.sections[].fields[]
211
- package.json # npm metadata; "files": ["dist", "ilml-plugin.json"] is the publish whitelist
212
- .npmignore # belt-and-suspenders excludes (.env, cookies.json, sources, etc.)
213
- .env / .env.example # dev only; gitignored
214
-
215
- run.mjs / syncAll.mjs / messageBot.mjs / scout.mjs / ... # entry points (one per ilml subcommand)
216
- src/
217
- config.mjs # reads via SDK getPluginConfig(); merges into process.env so the rest of the codebase keeps using process.env.X
218
- graphClient.mjs # SDK client wrapper
219
- database.mjs # local JSON DB at DATA_DIR
220
- saveLoginState.mjs # entry: ilml linkedin login
221
- ... domain modules ...
222
- scripts/
223
- build-plugin.mjs # esbuild bundler — outputs dist/*.mjs (minified, no sourcemaps)
224
- # externalizes: puppeteer, dotenv, @ilivemylife/graph-sdk
225
- ```
226
-
227
- ## Configuration model
228
-
229
- - The plugin reads its config **only** through `getPluginConfig()` from `@ilivemylife/graph-sdk` (called once in `src/config.mjs`).
230
- - Resolved values are merged into `process.env` so existing files reading `process.env.LINKEDIN_NAME` etc. keep working unchanged. New code should read directly from the SDK return value when feasible.
231
- - Auth token: `process.env.ILML_TOKEN` — injected by ilml CLI in production; resolved by the SDK in dev (local config / `.env` / global config / env var).
232
- - Active scope dir: `process.env.ILML_SCOPE_DIR` — set in production only. Plugin code never reads it directly; the SDK does.
195
+ ## Feedback & support
233
196
 
234
- ## Two run modes
197
+ Bug reports, feature requests, and general questions land in the plugin's **Support** node inside iLiveMyLife. Send a message there and we'll get back to you:
235
198
 
236
- | Mode | How invoked | Where config comes from |
237
- |---|---|---|
238
- | **Production** | `ilml linkedin <command>` | The active ilml scope's `<scope>/.ilivemylife/plugins-state/linkedin.json` |
239
- | **Dev** | `node run.mjs` (etc.) | `.env` next to `ilml-plugin.json` (auto-detected by SDK) |
199
+ - In any iLiveMyLife app (web / mobile / desktop): open https://app.ilivemylife.io/item/0000019dde81b04f-2e534bb8ebad0000 and use the messenger panel
200
+ - From the terminal: `ilml send 0000019dde81b04f-2e534bb8ebad0000 "your message"`
240
201
 
241
- The plugin code is identical between the two. `ILML_SCOPE_DIR`'s presence is the only signal.
242
-
243
- ## Local dev iteration
244
-
245
- When the plugin code itself is what's changing:
246
-
247
- ```bash
248
- # 1. (optional) edit ilml-plugin.json or src/*
249
- # 2. Build
250
- npm run build:plugin
202
+ ## Links
251
203
 
252
- # 3a. Quick check via direct run (uses .env)
253
- node run.mjs
254
-
255
- # 3b. Full check via ilml CLI — needs the plugin re-packed and re-installed
256
- npm pack
257
- ilml plugin install linkedin file:///$(pwd)/ilml-plugin-linkedin-X.Y.Z.tgz
258
- ilml linkedin <command>
259
- ```
260
-
261
- When the **SDK** is what's changing alongside, also rebuild and re-install the SDK from the sibling `graph-sdk.iLiveMyLife.io` repo:
262
-
263
- ```bash
264
- # In ../graph-sdk.iLiveMyLife.io
265
- npm run build && npm pack
266
-
267
- # In this repo
268
- npm install ../graph-sdk.iLiveMyLife.io/ilivemylife-graph-sdk-X.Y.Z.tgz --no-save
269
- npm run build:plugin
270
- ```
271
-
272
- ## Release process
273
-
274
- 1. **Update `CHANGELOG.md`** — add an entry at the top describing what changed for users.
275
- 2. **Bump version in BOTH** `package.json#version` AND `ilml-plugin.json#version`. They must match — `ilml plugin update` compares the manifest version against npm's `dist-tags.latest`. Drift here causes false update loops or silent skips.
276
- 3. **Commit with explicit paths only:**
277
- ```bash
278
- git commit -- package.json ilml-plugin.json CHANGELOG.md <other-changed-files> -m "v1.X.Y: short description"
279
- ```
280
- 4. **Push:** `git push`.
281
- 5. **Publish:** `npm publish --access public`. The `prepublishOnly` script runs `build:plugin` automatically — `dist/` is rebuilt from current sources before packing.
282
- 6. **Update the Releases node in the graph** — sync description with the new CHANGELOG entry.
283
-
284
- ## Security checklist before each `npm publish`
204
+ - This plugin on npm: https://www.npmjs.com/package/ilml-plugin-linkedin
205
+ - `ilml` CLI on npm: https://www.npmjs.com/package/@ilivemylife/graph-sdk
206
+ - iLiveMyLife: https://ilivemylife.io
285
207
 
286
- - `npm pack --dry-run` — verify only `dist/`, `ilml-plugin.json`, `package.json`, `README.md` end up in the tarball (~13 files). No `.env`, `cookies.json`, `*.json` data files, source `.mjs` at the repo root, `node_modules/`, internal handoff `.md`, `tmpclaude-*`, `.git/`.
287
- - `grep -E "ilya|sorokin|password|token|@gmail" dist/*.mjs dist/src/*.mjs` — no real personal data should appear in bundled output. (Examples in `README.md` like `ivan@example.com` are fine — they're documentation placeholders.)
288
- - `ls dist/*.map dist/**/*.map 2>/dev/null` — must return nothing (no sourcemaps).
289
- - `npm whoami` — confirm correct npm account before publish.
208
+ ---
290
209
 
291
- ## Useful pointers
210
+ ## Author & contact
292
211
 
293
- - iLiveMyLife graph-sdk Plugin spec & 12 architecture rules: [`PLUGINS.md`](https://github.com/iLiveMyLife/graph-sdk.iLiveMyLife.io/blob/main/PLUGINS.md)
294
- - SDK source: https://github.com/iLiveMyLife/graph-sdk.iLiveMyLife.io
295
- - This plugin on npm: https://www.npmjs.com/package/ilml-plugin-linkedin
296
- - ilml CLI on npm: https://www.npmjs.com/package/@ilivemylife/graph-sdk
212
+ **[Ilya Sorokin](https://www.digitaltwins.team/team/ilya-sorokin)** creator of [iLiveMyLife.io](https://ilivemylife.io) and this plugin.
297
213
 
298
- ---
214
+ - LinkedIn: [linkedin.com/in/ilyasorokin](https://www.linkedin.com/in/ilyasorokin/)
215
+ - Email: info@ilivemylife.io
299
216
 
300
- ## Author
217
+ ### Need a custom plugin or extension?
301
218
 
302
- Ilya Sorokin · [iLiveMyLife.io](https://ilivemylife.io) · info@ilivemylife.io
219
+ [**DigitalTwins.team**](https://www.digitaltwins.team/) my consulting company — designs and builds custom automation, SDK extensions, and bespoke plugins for the iLiveMyLife ecosystem (and beyond). If you want to integrate your own workflow with iLiveMyLife, extend this plugin's behavior, or commission something new, get in touch.
package/ilml-plugin.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "linkedin",
3
- "version": "1.2.1",
3
+ "version": "1.2.2",
4
4
  "description": "LinkedIn job automation: apply, scout, sync, funnel, messages",
5
5
  "commands": {
6
6
  "apply": { "run": "node dist/run.mjs" },
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "ilml-plugin-linkedin",
3
- "version": "1.2.1",
3
+ "version": "1.2.2",
4
4
  "description": "ilml plugin: LinkedIn job automation — apply, scout, sync, funnel, messages",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist",
8
- "ilml-plugin.json"
8
+ "ilml-plugin.json",
9
+ "CHANGELOG.md"
9
10
  ],
10
11
  "scripts": {
11
12
  "build:plugin": "node scripts/build-plugin.mjs",