Skip to content

Tutorial 2 How the Code Works hi

James Morris edited this page Jul 29, 2026 · 1 revision

ट्यूटोरियल 2 · कोड कैसे काम करता है

लक्ष्य: उन कुछ डिज़ाइन निर्णयों को समझना जो इस प्रोजेक्ट को एक AI एजेंट के साथ बदलना आसान — और सुरक्षित — बनाते हैं। आपको कोड याद करने की ज़रूरत नहीं; आपको मानसिक मॉडल चाहिए, ताकि आप एजेंट को सटीक निर्देश दे सकें।

← पिछला: ट्यूटोरियल 1 परिचय · अगला: ट्यूटोरियल 3 आपका पहला एजेंट टास्क


नक्शा

lockedin-cli/
├── bin/lockedin.js      # entry point — एकमात्र हिस्सा जो input/output करता है
├── src/lockedin.js      # core — pure functions जो strings लौटाते हैं
├── test/
│   ├── unit.test.js     # core functions को सीधे test करता है
│   └── cli.test.js      # असली binary चलाकर उसका output जाँचता है
├── tools/screenshot.js  # docs/ में दिखने वाली SVGs render करता है
└── package.json         # metadata + `npm test` script

चार विचार इसे चलाते हैं। इन्हें सीख लें और आप लगभग कोई भी बदलाव आत्मविश्वास के साथ एजेंट से माँग सकते हैं।

विचार 1 — एक pure core जो strings लौटाता है

src/lockedin.js खोलें। ध्यान दें कि render functions print नहीं करते — वे strings लौटाते हैं:

function renderConnect() {
  const names = shuffle(NAMES).slice(0, 6);
  // ...लाइनों का एक array बनाता है...
  return out.join('\n');   // text लौटाता है; कुछ print नहीं करता
}

सारी असली printing (और आपके keystrokes पढ़ना) bin/lockedin.js में होती है। यह "core data लौटाता है, edge I/O करता है" विभाजन यहाँ की सबसे महत्वपूर्ण चीज़ है, क्योंकि जो function सिर्फ़ एक string लौटाता है, उसे test करना बहुत आसान है:

const out = app.renderConnect();
assert.ok(out.includes("“I’d love to add you to my professional network.” — भेजा गया "));

कोई terminal mock नहीं, कोई stdout capture नहीं। जब आप एजेंट से एक feature जोड़ने को कहते हैं, इसी वजह से वह उसके लिए एक तेज़, भरोसेमंद test भी जोड़ सकता है।

विचार 2 — Content pools

मज़ाक src/lockedin.js के ऊपरी हिस्से में सादे arrays में रहते हैं:

const HOOKS = [ 'Unpopular opinion:', 'इसे sink in होने दें।', /* ...~25 total... */ ];
const LESSONS = [ '→ आपका network ही आपका net worth है।', /* ... */ ];

Generators इन pools में से चुनते हैं। v1.2.0 में हर pool ~25 variations तक बढ़ा, और template pools की एक दूसरी परत जोड़ी गई (जैसे POST_REVEALS और REFLECT_TAGSETS) ताकि हर output की संरचना बदले, सिर्फ़ शब्द नहीं। content जोड़ना अक्सर एक array में strings जोड़ने जितना सरल होता है — एजेंट को देने के लिए एक बढ़िया पहला काम।

विचार 3 — Seeded randomness = deterministic tests

random output और automated tests सुनने में असंगत लगते हैं। यह प्रोजेक्ट उस घेरे को एक seedable random number generator से हल करता है:

setSeed(42);
const a = generatePost();
setSeed(42);
const b = generatePost();
// a === b  → वही seed, वही post

हर random चुनाव साझा pick() / shuffle() helpers से जाता है, जो उस seeded generator से खींचते हैं। LOCKEDIN_SEED=42 सेट करें और CLI पूरी तरह reproducible है। किसी भी बदलाव का सुनहरा नियम: नई randomness को pick / shuffle इस्तेमाल करना ही चाहिए, कभी सीधे Math.random नहीं — वरना determinism (और tests) टूट जाते हैं। इसे संभालकर रखें; अध्याय 3 में आप एजेंट को यह याद दिलाएँगे।

विचार 4 — tests की दो परतें

  • test/unit.test.js core functions को call करता है और वे जो strings लौटाते हैं उन पर assert करता है (तेज़, सटीक)।
  • test/cli.test.js असल में bin/lockedin.js चलाता है और उसका असली stdout व exit code जाँचता है (साबित करता है कि पूरी चीज़ शुरू से अंत तक काम करती है)।

साथ में ये गेट हैं। ये invariants भी encode करते हैं — वे वादे जो ऐप करता है। उदाहरण के लिए, एक post हमेशा एक ज्ञात hook से शुरू होती है और हमेशा कम से कम तीन lessons रखती है; "connect" screen हमेशा incalculable कहता है। जब एजेंट कोड बदलता है, ये tests चुपचाप टूटे किसी भी वादे को पकड़ लेते हैं।


एजेंट के साथ काम के लिए यह क्यों मायने रखता है

चारों विचार एक साथ रखें और आपको एक ऐसा codebase मिलता है जहाँ एक एजेंट कर सकता है:

  1. एक feature जोड़ना एक pure function के रूप में जो string लौटाता है,
  2. उसके लिए किसी I/O कसरत के बिना एक test जोड़ना,
  3. seeded RNG के ज़रिए output को reproducible रखना, और
  4. मौजूदा गेट चलाकर साबित करना कि कुछ नहीं टूटा

यही वह loop है जिसे आप अगले अध्याय में चलाएँगे।

✅ अपने एजेंट के साथ आज़माएँ

अपने एजेंट से अपनी समझ verify करने को कहें — पढ़कर, edit किए बिना:

  1. "src/lockedin.js का हर content pool और हर एक में कितनी entries हैं, सूचीबद्ध करो।"
  2. "एक invariant दिखाओ जो test/unit.test.js generatePost के बारे में लागू करता है, और समझाओ कि उसे क्या तोड़ेगा।"
  3. "seeded RNG कहाँ परिभाषित है, और किन functions को Math.random की जगह उसे इस्तेमाल करना ही चाहिए? कुछ मत बदलो — बस समझाओ।"

जब एजेंट के उत्तर इस अध्याय से मेल खाएँ, आप बनाने के लिए तैयार हैं।

अगला: ट्यूटोरियल 3 आपका पहला एजेंट टास्क

📘 LockedIn CLI wiki

Tutorial

Reference


Satire · Sátira · 風刺. Not affiliated with LinkedIn. GPL-3.0-or-later.

Clone this wiki locally