@algolia/wizard 0.8.0-rc.60.48 → 0.8.0-rc.62.50

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/dist/main.js CHANGED
@@ -907,7 +907,7 @@ var accessItems = [
907
907
  {
908
908
  tag: "READ",
909
909
  title: "Project files",
910
- description: "reads your dependency manifests (package.json, pyproject.toml\u2026), configs & source to detect your stack. Read-only; nothing is uploaded."
910
+ description: "reads your dependency manifests (package.json, pyproject.toml, Gemfile\u2026), configs & source to detect your stack. Read-only; nothing is uploaded."
911
911
  },
912
912
  {
913
913
  tag: "WRITE",
@@ -2329,6 +2329,73 @@ var LANGUAGE_PROFILES = {
2329
2329
  "build",
2330
2330
  "htmlcov"
2331
2331
  ]
2332
+ },
2333
+ ruby: {
2334
+ id: "ruby",
2335
+ displayName: "Ruby",
2336
+ aliases: ["ruby", "rb", "rails", "ruby on rails", "rubyonrails"],
2337
+ manifests: ["Gemfile", "*.gemspec"],
2338
+ packageManagers: [
2339
+ {
2340
+ id: "bundler",
2341
+ dependency: { mode: "agent-declares", file: "Gemfile" },
2342
+ installSteps: [{ argv: ["bundle", "install"] }],
2343
+ ingest: {
2344
+ kind: "auto",
2345
+ argv: ["bundle", "exec", "ruby", ENTRYPOINT_TOKEN],
2346
+ entrypointExtensions: [".rb"]
2347
+ }
2348
+ }
2349
+ ],
2350
+ sdk: { packageName: "algolia", versionPin: "~> 3.0", docKey: "ruby" },
2351
+ ingestEntrypointExample: `${INGEST_DIR}/ingest.rb`,
2352
+ // Ruby has no directory-level syntax check (`ruby -c` is one file at a
2353
+ // time), so verification relies on the agent's own review here.
2354
+ verification: [],
2355
+ envReadInstruction: "Read them from `ENV.fetch('NAME')`.",
2356
+ skipDirs: ["vendor", "tmp", "log", "coverage"]
2357
+ },
2358
+ php: {
2359
+ id: "php",
2360
+ displayName: "PHP",
2361
+ aliases: ["php", "laravel", "symfony"],
2362
+ manifests: ["composer.json"],
2363
+ packageManagers: [
2364
+ {
2365
+ id: "composer",
2366
+ // `composer require` both declares and installs, and unlike editing
2367
+ // composer.json by hand it can't leave composer.lock out of date (which
2368
+ // makes a later `composer install` refuse to run).
2369
+ dependency: { mode: "wizard-installs" },
2370
+ installSteps: [
2371
+ {
2372
+ argv: [
2373
+ "composer",
2374
+ "require",
2375
+ "algolia/algoliasearch-client-php:^4",
2376
+ "--no-interaction",
2377
+ // Repo post-install scripts are the project's code, not ours to
2378
+ // trigger; Laravel's package:discover also fails in a bare tree.
2379
+ "--no-scripts"
2380
+ ]
2381
+ }
2382
+ ],
2383
+ ingest: {
2384
+ kind: "auto",
2385
+ argv: ["php", ENTRYPOINT_TOKEN],
2386
+ entrypointExtensions: [".php"]
2387
+ }
2388
+ }
2389
+ ],
2390
+ sdk: {
2391
+ packageName: "algolia/algoliasearch-client-php",
2392
+ versionPin: "^4",
2393
+ docKey: "php"
2394
+ },
2395
+ ingestEntrypointExample: `${INGEST_DIR}/ingest.php`,
2396
+ verification: [],
2397
+ envReadInstruction: "Read them from `getenv('NAME')`.",
2398
+ skipDirs: ["vendor", "node_modules"]
2332
2399
  }
2333
2400
  };
2334
2401
  var DEFAULT_LANGUAGE_ID = "javascript";
@@ -3011,7 +3078,7 @@ var detectLanguageSchema = z16.object({
3011
3078
  var detectLanguage = () => runAgent({
3012
3079
  instructions: [
3013
3080
  "Analyze the codebase and determine the programming languages and frameworks used",
3014
- "Start from the dependency manifests: package.json, pyproject.toml, requirements.txt.",
3081
+ "Start from the dependency manifests: package.json, pyproject.toml, requirements.txt, Gemfile, composer.json.",
3015
3082
  "List the language that owns the backend/data code first \u2014 that is the one an ingestion script will be written in.",
3016
3083
  "If a superset language is found, exclude the subset language. TS-over-JS.",
3017
3084
  "If a meta-framework is used, exclude the framework. Next-over-React.",
@@ -3064,7 +3131,7 @@ var MODE_CONFIG = {
3064
3131
  "Analyze the codebase to find the data entities (models) that should be ingested into Algolia.",
3065
3132
  "For each entity, return its name, the file path(s) where it is defined, and its indexable attribute keys (the fields a user would search or filter on).",
3066
3133
  "Inspect the source of each entity to extract real field names for attributes \u2014 do not guess or leave attributes empty.",
3067
- "Entities live wherever the stack keeps them: TypeScript interfaces or a Prisma schema, Django models.py, Pydantic models.",
3134
+ "Entities live wherever the stack keeps them: TypeScript interfaces or a Prisma schema, Django models.py, Rails app/models, Laravel Eloquent models, Pydantic models.",
3068
3135
  "Prefer domain models (e.g. Document, Product, User) over framework or infrastructure types.",
3069
3136
  "Use as few tools as possible, but do not guess. If you cannot find any entities, return an empty array.",
3070
3137
  "Ignore directories that may be related to testing, like `/fixtures`, `/tests`, etc",
@@ -3087,7 +3154,7 @@ var MODE_CONFIG = {
3087
3154
  verification: {
3088
3155
  instructions: [
3089
3156
  "Analyze the codebase to determine which code-quality tools are available to validate changes.",
3090
- "Look at the dependency manifest and config files for the project's languages: package.json scripts with tsconfig/eslint/prettier, pyproject.toml or setup.cfg (ruff, mypy, black).",
3157
+ "Look at the dependency manifest and config files for the project's languages: package.json scripts with tsconfig/eslint/prettier, pyproject.toml or setup.cfg (ruff, mypy, black), Gemfile with .rubocop.yml, composer.json scripts (phpstan, pint).",
3091
3158
  'Return the tool names as an array, e.g. ["eslint", "prettier", "tsc"] or ["ruff", "mypy"].',
3092
3159
  "Use as few tools as possible, but do not guess. If you cannot find any, return an empty array.",
3093
3160
  "Ignore directories that may be related to testing, like `/fixtures`, `/tests`, etc",
@@ -3115,7 +3182,7 @@ async function runAnalysis(mode, extraInstructions = []) {
3115
3182
  // package.json
3116
3183
  var package_default = {
3117
3184
  name: "@algolia/wizard",
3118
- version: "0.8.0-rc.60.48",
3185
+ version: "0.8.0-rc.62.50",
3119
3186
  description: "Magically implement Algolia functionality in your codebase",
3120
3187
  type: "module",
3121
3188
  engines: {
@@ -17,6 +17,8 @@ Install the latest stable within the major; never pin an exact patch.
17
17
  | --- | --- | --- |
18
18
  | JavaScript/TypeScript | `algoliasearch` | `^5` |
19
19
  | Python | `algoliasearch` | `>=4,<5` |
20
+ | Ruby | `algolia` | `~> 3.0` |
21
+ | PHP | `algolia/algoliasearch-client-php` | `^4` |
20
22
 
21
23
  ## Search UI
22
24
 
@@ -0,0 +1,50 @@
1
+ # Save records (algoliasearch-client-php v4)
2
+
3
+ Adds records to an index. Write op — use a **write key**, server-side only.
4
+
5
+ Dependency: `algolia/algoliasearch-client-php` `^4` — the wizard runs
6
+ `composer require` for you; do not hand-edit `composer.json`.
7
+
8
+ `require 'vendor/autoload.php'` before anything else, or the class won't resolve
9
+ (from `.algolia-wizard/` the path is `__DIR__.'/../vendor/autoload.php'`).
10
+
11
+ ```php
12
+ <?php
13
+
14
+ require __DIR__.'/../vendor/autoload.php';
15
+
16
+ use Algolia\AlgoliaSearch\Api\SearchClient;
17
+
18
+ $appId = getenv('ALGOLIA_APPLICATION_ID');
19
+ $apiKey = getenv('ALGOLIA_WRITE_API_KEY');
20
+ $indexName = 'playlists';
21
+
22
+ $client = SearchClient::create($appId, $apiKey);
23
+ $records = [['objectID' => '1', 'name' => 'Hot 100', 'visibility' => 'public']];
24
+
25
+ $responses = $client->saveObjects($indexName, $records, true);
26
+ ```
27
+
28
+ ```php
29
+ saveObjects(
30
+ string $indexName, // required
31
+ array $objects, // required
32
+ bool $waitForTasks = false,
33
+ int $batchSize = 1000,
34
+ array $requestOptions = []
35
+ ) // => array of batch responses, one per 1,000-record batch
36
+ ```
37
+
38
+ Unlike the typed clients, PHP returns **plain associative arrays**, not objects:
39
+ `$responses[0]['taskID']`, `$responses[0]['objectIDs']`. Always an array of them —
40
+ never treat it as one response.
41
+
42
+ Read records from a JSON file:
43
+
44
+ ```php
45
+ $records = json_decode(file_get_contents($recordsPath), true);
46
+ ```
47
+
48
+ After a successful ingest, print `ALGOLIA_WIZARD_RECORD_COUNT=<n>` as the last
49
+ stdout line (`echo 'ALGOLIA_WIZARD_RECORD_COUNT='.count($records)."\n";`), with no
50
+ other output after it.
@@ -0,0 +1,48 @@
1
+ # Save records (algolia v3)
2
+
3
+ Adds records to an index. Write op — use a **write key**, server-side only.
4
+
5
+ Dependency: gem `algolia`, `~> 3.0` (`gem 'algolia', '~> 3.0'`).
6
+
7
+ `require "algolia"` (gem name is `algolia`, not `algoliasearch`). Build the client
8
+ with `Algolia::SearchClient.create`.
9
+
10
+ ```ruby
11
+ require "algolia"
12
+
13
+ app_id = ENV.fetch("ALGOLIA_APPLICATION_ID")
14
+ api_key = ENV.fetch("ALGOLIA_WRITE_API_KEY")
15
+ index_name = "playlists"
16
+
17
+ client = Algolia::SearchClient.create(app_id, api_key)
18
+
19
+ records = [{ "objectID" => "1", "name" => "Hot 100", "visibility" => "public" }]
20
+
21
+ responses = client.save_objects(index_name, records, true)
22
+ ```
23
+
24
+ ```ruby
25
+ save_objects(
26
+ index_name, # String, required
27
+ objects, # Array<Hash>, required
28
+ wait_for_tasks = false,
29
+ batch_size = 1000,
30
+ request_options = {}
31
+ ) # => Array<Algolia::Search::BatchResponse>, one entry per 1,000-record batch
32
+ ```
33
+
34
+ Args are **positional**, and every method/field is **snake_case**: read
35
+ `r.task_id` and `r.object_ids`, not `taskID`/`objectIDs`. The return value is an
36
+ array — never treat it as one object.
37
+
38
+ Read records from a JSON file:
39
+
40
+ ```ruby
41
+ require "json"
42
+
43
+ records = JSON.parse(File.read(records_path))
44
+ ```
45
+
46
+ After a successful ingest, print `ALGOLIA_WIZARD_RECORD_COUNT=<n>` as the last
47
+ stdout line (`puts "ALGOLIA_WIZARD_RECORD_COUNT=#{records.length}"`), with no
48
+ other output after it.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@algolia/wizard",
3
- "version": "0.8.0-rc.60.48",
3
+ "version": "0.8.0-rc.62.50",
4
4
  "description": "Magically implement Algolia functionality in your codebase",
5
5
  "type": "module",
6
6
  "engines": {