qiksy 1.2.2 → 1.3.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qiksy",
3
- "version": "1.2.2",
3
+ "version": "1.3.0",
4
4
  "description": "Qiksy \u2014 one local engine for every Qiksy tool (Work Finder, Travel Assistant, Client Finder). Runs on your own Claude; nothing leaves your machine.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -33,7 +33,11 @@ function defaults() {
33
33
  re-read every pass. Three days was aggressive enough to hide most of the
34
34
  market; two weeks is still "current" and leaves something to find. */
35
35
  freshnessFrom: 0,
36
- freshnessDays: 14,
36
+ /* Seven days, not fourteen (owner decision 2026-07-26). A wider window mostly
37
+ buys older postings that nobody answers any more, at the cost of the agent
38
+ re-reading them — slower AND more of the person's Claude quota for less. The
39
+ window is a setting, so "dig deeper" stays one control away. */
40
+ freshnessDays: 7,
37
41
  /* How many sweeps at most. Unbounded would spend the user's whole Claude
38
42
  quota in one night; two barren sweeps in a row also end it early. */
39
43
  maxSweeps: 6,
@@ -212,8 +212,21 @@ function startSearch(position, run = null) {
212
212
  const sweep = async (wave) => {
213
213
  const exclude = db.vacancies.filter(v => v.positionId === position.id).map(v => v.company);
214
214
  const before = added;
215
+ /* The FIRST wave is deliberately smaller. Measured on a live run 2026-07-26: the
216
+ first finds landed after ~7 minutes and the next 20 minutes added two more —
217
+ so the person was made to wait for a tail they could have been working through.
218
+ A short first wave gets them a usable list fast; the rest keeps arriving behind
219
+ them, and the UI now says so. Later waves go back to full size. */
220
+ const perWave = wave === 1
221
+ ? Math.min(12, db.settings.resultsPerSearch ?? 20)
222
+ : (db.settings.resultsPerSearch ?? 20);
223
+ const waveSettings = { ...db.settings, resultsPerSearch: perWave };
224
+ // The app shows "wave 2 of 6" from these — a log line in Russian could not be
225
+ // translated, and a run with no visible progress reads as a hang.
226
+ job.wave = wave;
227
+ job.waves = maxSweeps;
215
228
  const r = await runClaude({
216
- prompt: searchPrompt(position, profile, exclude, db.settings, { wave, waves: maxSweeps, canNarrow: effectivePlanId() !== 'free' }),
229
+ prompt: searchPrompt(position, profile, exclude, waveSettings, { wave, waves: maxSweeps, canNarrow: effectivePlanId() !== 'free' }),
217
230
  allowedTools: ['WebSearch', 'WebFetch'],
218
231
  withBrowser: !!db.settings.searchViaBrowser,
219
232
  model: db.settings.model,