ashlr-plugin 1.36.4

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.
Files changed (499) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/.claude-plugin/marketplace.json +39 -0
  3. package/.claude-plugin/plugin.json +36 -0
  4. package/.codex/agents/README.md +9 -0
  5. package/.codex/agents/ashlr-explorer.md +36 -0
  6. package/.codex/agents/ashlr-worker.md +38 -0
  7. package/.codex-plugin/plugin.json +45 -0
  8. package/.mcp.json +14 -0
  9. package/LICENSE +21 -0
  10. package/README.md +311 -0
  11. package/agents/ashlr-code.md +69 -0
  12. package/agents/ashlr-explore.md +44 -0
  13. package/agents/ashlr-plan.md +54 -0
  14. package/bench/fixtures/notebook-large.ipynb +660 -0
  15. package/bench/fixtures/notebook-small.ipynb +39 -0
  16. package/bench/fixtures/tasklist-closed.json +62 -0
  17. package/bench/fixtures/tasklist-large-mixed.json +27 -0
  18. package/bench/fixtures/tasklist-sprint-open.json +79 -0
  19. package/bench/fixtures/websearch-bun-runtime.json +32 -0
  20. package/bench/fixtures/websearch-react-hooks-patterns.json +32 -0
  21. package/bench/fixtures/websearch-typescript-generics.json +38 -0
  22. package/bench/refs/node-sdk/.refrev +1 -0
  23. package/bench/refs/node-sdk/README.md +17 -0
  24. package/bench/refs/node-sdk/src/agent/agent.ts +163 -0
  25. package/bench/refs/node-sdk/src/agent/create-agent-ui-stream.ts +83 -0
  26. package/bench/refs/node-sdk/src/agent/tool-loop-agent.ts +238 -0
  27. package/bench/refs/node-sdk/src/embed/embed-many.ts +409 -0
  28. package/bench/refs/node-sdk/src/embed/embed-result.ts +50 -0
  29. package/bench/refs/node-sdk/src/embed/embed.ts +257 -0
  30. package/bench/refs/node-sdk/src/error/invalid-argument-error.ts +34 -0
  31. package/bench/refs/node-sdk/src/error/invalid-tool-input-error.ts +33 -0
  32. package/bench/refs/node-sdk/src/error/no-object-generated-error.ts +70 -0
  33. package/bench/refs/node-sdk/src/generate-image/generate-image-result.ts +42 -0
  34. package/bench/refs/node-sdk/src/generate-image/generate-image.ts +362 -0
  35. package/bench/refs/node-sdk/src/generate-object/generate-object-result.ts +67 -0
  36. package/bench/refs/node-sdk/src/generate-object/generate-object.ts +501 -0
  37. package/bench/refs/node-sdk/src/generate-object/inject-json-instruction.ts +30 -0
  38. package/bench/refs/node-sdk/src/generate-object/output-strategy.ts +415 -0
  39. package/bench/refs/node-sdk/src/generate-object/repair-text.ts +12 -0
  40. package/bench/refs/node-sdk/src/generate-object/stream-object.ts +960 -0
  41. package/bench/refs/node-sdk/src/generate-speech/generate-speech.ts +191 -0
  42. package/bench/refs/node-sdk/src/generate-text/generate-text.ts +1484 -0
  43. package/bench/refs/node-sdk/src/generate-text/stream-text.ts +2708 -0
  44. package/bench/refs/node-sdk/src/generate-text/tool-call.ts +59 -0
  45. package/bench/refs/node-sdk/src/generate-text/tool-result.ts +36 -0
  46. package/bench/refs/node-sdk/src/telemetry/create-telemetry-dispatcher.ts +146 -0
  47. package/bench/refs/node-sdk/src/telemetry/telemetry-registry.ts +15 -0
  48. package/bench/refs/node-sdk/src/telemetry/telemetry.ts +223 -0
  49. package/bench/refs/node-sdk/src/util/async-iterable-stream.ts +94 -0
  50. package/bench/refs/node-sdk/src/util/consume-stream.ts +31 -0
  51. package/bench/refs/node-sdk/src/util/create-stitchable-stream.ts +112 -0
  52. package/bench/refs/node-sdk/src/util/download/download.ts +74 -0
  53. package/bench/refs/node-sdk/src/util/error-handler.ts +1 -0
  54. package/bench/refs/node-sdk/src/util/fix-json.ts +401 -0
  55. package/bench/refs/node-sdk/src/util/merge-objects.ts +79 -0
  56. package/bench/refs/python-lib/.refrev +1 -0
  57. package/bench/refs/python-lib/README.md +18 -0
  58. package/bench/refs/python-lib/pandas/core/_numba/executor.py +249 -0
  59. package/bench/refs/python-lib/pandas/core/_numba/extensions.py +586 -0
  60. package/bench/refs/python-lib/pandas/core/_numba/kernels/mean_.py +198 -0
  61. package/bench/refs/python-lib/pandas/core/_numba/kernels/min_max_.py +178 -0
  62. package/bench/refs/python-lib/pandas/core/_numba/kernels/sum_.py +255 -0
  63. package/bench/refs/python-lib/pandas/core/_numba/kernels/var_.py +251 -0
  64. package/bench/refs/python-lib/pandas/core/accessor.py +520 -0
  65. package/bench/refs/python-lib/pandas/core/api.py +138 -0
  66. package/bench/refs/python-lib/pandas/core/array_algos/masked_accumulations.py +97 -0
  67. package/bench/refs/python-lib/pandas/core/array_algos/masked_reductions.py +252 -0
  68. package/bench/refs/python-lib/pandas/core/array_algos/putmask.py +150 -0
  69. package/bench/refs/python-lib/pandas/core/array_algos/quantile.py +232 -0
  70. package/bench/refs/python-lib/pandas/core/array_algos/replace.py +159 -0
  71. package/bench/refs/python-lib/pandas/core/array_algos/take.py +609 -0
  72. package/bench/refs/python-lib/pandas/core/arraylike.py +534 -0
  73. package/bench/refs/python-lib/pandas/core/arrays/_arrow_string_mixins.py +434 -0
  74. package/bench/refs/python-lib/pandas/core/arrays/_mixins.py +630 -0
  75. package/bench/refs/python-lib/pandas/core/arrays/_ranges.py +276 -0
  76. package/bench/refs/python-lib/pandas/core/arrays/_utils.py +77 -0
  77. package/bench/refs/python-lib/pandas/core/arrays/arrow/accessors.py +521 -0
  78. package/bench/refs/python-lib/pandas/core/arrays/arrow/extension_types.py +174 -0
  79. package/bench/refs/python-lib/pandas/core/arrays/boolean.py +454 -0
  80. package/bench/refs/python-lib/pandas/core/arrays/floating.py +192 -0
  81. package/bench/refs/python-lib/pandas/core/arrays/integer.py +296 -0
  82. package/bench/refs/python-lib/pandas/core/arrays/masked.py +2140 -0
  83. package/bench/refs/python-lib/pandas/core/arrays/numeric.py +305 -0
  84. package/bench/refs/python-lib/pandas/core/arrays/numpy_.py +701 -0
  85. package/bench/refs/python-lib/pandas/core/arrays/period.py +1586 -0
  86. package/bench/refs/python-lib/pandas/core/arrays/sparse/accessor.py +505 -0
  87. package/bench/refs/python-lib/pandas/core/arrays/sparse/scipy_sparse.py +208 -0
  88. package/bench/refs/rust-project/.refrev +1 -0
  89. package/bench/refs/rust-project/README.md +17 -0
  90. package/bench/refs/rust-project/tokio/src/doc/os.rs +68 -0
  91. package/bench/refs/rust-project/tokio/src/fs/dir_builder.rs +129 -0
  92. package/bench/refs/rust-project/tokio/src/fs/file.rs +1113 -0
  93. package/bench/refs/rust-project/tokio/src/fs/mocks.rs +176 -0
  94. package/bench/refs/rust-project/tokio/src/fs/mod.rs +324 -0
  95. package/bench/refs/rust-project/tokio/src/fs/open_options.rs +856 -0
  96. package/bench/refs/rust-project/tokio/src/fs/read.rs +80 -0
  97. package/bench/refs/rust-project/tokio/src/fs/read_dir.rs +357 -0
  98. package/bench/refs/rust-project/tokio/src/fs/write.rs +99 -0
  99. package/bench/refs/rust-project/tokio/src/future/maybe_done.rs +123 -0
  100. package/bench/refs/rust-project/tokio/src/future/try_join.rs +82 -0
  101. package/bench/refs/rust-project/tokio/src/io/async_buf_read.rs +117 -0
  102. package/bench/refs/rust-project/tokio/src/io/async_read.rs +133 -0
  103. package/bench/refs/rust-project/tokio/src/io/async_seek.rs +96 -0
  104. package/bench/refs/rust-project/tokio/src/io/async_write.rs +402 -0
  105. package/bench/refs/rust-project/tokio/src/io/blocking.rs +339 -0
  106. package/bench/refs/rust-project/tokio/src/io/interest.rs +345 -0
  107. package/bench/refs/rust-project/tokio/src/io/join.rs +130 -0
  108. package/bench/refs/rust-project/tokio/src/io/mod.rs +308 -0
  109. package/bench/refs/rust-project/tokio/src/io/poll_evented.rs +319 -0
  110. package/bench/refs/rust-project/tokio/src/io/read_buf.rs +344 -0
  111. package/bench/refs/rust-project/tokio/src/io/ready.rs +322 -0
  112. package/bench/refs/rust-project/tokio/src/io/split.rs +166 -0
  113. package/bench/refs/rust-project/tokio/src/io/stderr.rs +148 -0
  114. package/bench/refs/rust-project/tokio/src/io/stdin.rs +98 -0
  115. package/bench/refs/rust-project/tokio/src/io/stdio_common.rs +222 -0
  116. package/bench/refs/rust-project/tokio/src/io/stdout.rs +197 -0
  117. package/bench/refs/rust-project/tokio/src/io/util/buf_reader.rs +311 -0
  118. package/bench/refs/rust-project/tokio/src/io/util/buf_stream.rs +207 -0
  119. package/bench/refs/rust-project/tokio/src/io/util/buf_writer.rs +310 -0
  120. package/bench/refs/rust-project/tokio/src/io/util/chain.rs +144 -0
  121. package/commands/_spawn-patterns.json +32 -0
  122. package/commands/ashlr-allow.md +21 -0
  123. package/commands/ashlr-benchmark.md +53 -0
  124. package/commands/ashlr-brief.md +97 -0
  125. package/commands/ashlr-budget.md +76 -0
  126. package/commands/ashlr-compact.md +54 -0
  127. package/commands/ashlr-dashboard.md +37 -0
  128. package/commands/ashlr-doctor.md +56 -0
  129. package/commands/ashlr-eco-mode.md +92 -0
  130. package/commands/ashlr-genome-init.md +24 -0
  131. package/commands/ashlr-genome-keygen.md +36 -0
  132. package/commands/ashlr-genome-loop.md +118 -0
  133. package/commands/ashlr-genome-push.md +36 -0
  134. package/commands/ashlr-genome-rewrap.md +48 -0
  135. package/commands/ashlr-genome-team-init.md +67 -0
  136. package/commands/ashlr-handoff.md +23 -0
  137. package/commands/ashlr-help.md +86 -0
  138. package/commands/ashlr-hook-timings.md +30 -0
  139. package/commands/ashlr-leaderboard.md +50 -0
  140. package/commands/ashlr-ollama-setup.md +39 -0
  141. package/commands/ashlr-orchestrate-status.md +72 -0
  142. package/commands/ashlr-orchestrate.md +83 -0
  143. package/commands/ashlr-parallelize.md +63 -0
  144. package/commands/ashlr-report-crash.md +33 -0
  145. package/commands/ashlr-resume.md +72 -0
  146. package/commands/ashlr-savings.md +24 -0
  147. package/commands/ashlr-settings.md +50 -0
  148. package/commands/ashlr-spawn.md +61 -0
  149. package/commands/ashlr-start.md +60 -0
  150. package/commands/ashlr-status.md +64 -0
  151. package/commands/ashlr-team-invite.md +47 -0
  152. package/commands/ashlr-tier.md +122 -0
  153. package/commands/ashlr-tour.md +60 -0
  154. package/commands/ashlr-update.md +155 -0
  155. package/commands/ashlr-upgrade.md +96 -0
  156. package/commands/goal.md +58 -0
  157. package/commands/loop.md +40 -0
  158. package/docs/CNAME +1 -0
  159. package/docs/PRO_TIER.md +104 -0
  160. package/docs/README.md +21 -0
  161. package/docs/architecture.md +415 -0
  162. package/docs/ashlr-pipe.md +161 -0
  163. package/docs/assets/logo.svg +19 -0
  164. package/docs/assets/og.png +0 -0
  165. package/docs/assets/og.svg +41 -0
  166. package/docs/benchmarks-v2.json +355 -0
  167. package/docs/benchmarks.json +102 -0
  168. package/docs/benchmarks.md +211 -0
  169. package/docs/billing.md +185 -0
  170. package/docs/cloud-genome.md +155 -0
  171. package/docs/competitive-wozcode.md +92 -0
  172. package/docs/deploy.md +325 -0
  173. package/docs/email-templates.md +113 -0
  174. package/docs/embed-tuning.md +103 -0
  175. package/docs/genome.md +120 -0
  176. package/docs/github-oauth-onboarding.md +127 -0
  177. package/docs/hero-video-script.md +129 -0
  178. package/docs/index.html +2262 -0
  179. package/docs/install-prompt.md +78 -0
  180. package/docs/install-windows.md +132 -0
  181. package/docs/install.ps1 +171 -0
  182. package/docs/install.sh +146 -0
  183. package/docs/launch/README.md +114 -0
  184. package/docs/launch/hn.md +49 -0
  185. package/docs/launch/reddit.md +45 -0
  186. package/docs/launch/x.md +65 -0
  187. package/docs/launch-post.md +112 -0
  188. package/docs/legal.md +78 -0
  189. package/docs/llm-providers.md +99 -0
  190. package/docs/multi-host-mcp.md +217 -0
  191. package/docs/multi-turn-architecture.md +108 -0
  192. package/docs/operations/deployment.md +108 -0
  193. package/docs/operations/error-monitoring.md +70 -0
  194. package/docs/operations/weekly-digest.md +70 -0
  195. package/docs/operations.md +494 -0
  196. package/docs/platform-support.md +133 -0
  197. package/docs/policy-packs.md +188 -0
  198. package/docs/press-kit/fact-sheet.md +78 -0
  199. package/docs/press-kit/founder-bio.md +3 -0
  200. package/docs/press-kit/logo.svg +33 -0
  201. package/docs/press-kit/screenshots.md +146 -0
  202. package/docs/pricing.md +251 -0
  203. package/docs/pro-backend-architecture.md +523 -0
  204. package/docs/producthunt.md +52 -0
  205. package/docs/router-migration.md +110 -0
  206. package/docs/session-log-schema.md +68 -0
  207. package/docs/social.md +95 -0
  208. package/docs/team-genome.md +528 -0
  209. package/docs/telemetry.md +194 -0
  210. package/docs/test-isolation.md +100 -0
  211. package/docs/upgrade.md +159 -0
  212. package/hooks/_hook-errors.ts +87 -0
  213. package/hooks/_hook-perf-emit.ts +113 -0
  214. package/hooks/_hook-timing-ledger.ts +1133 -0
  215. package/hooks/_nudge-throttle.ts +127 -0
  216. package/hooks/_recent-blocks.ts +127 -0
  217. package/hooks/audit-upload.ts +86 -0
  218. package/hooks/codex-hooks.json +171 -0
  219. package/hooks/commit-attribution.ts +179 -0
  220. package/hooks/edit-batching-nudge.ts +154 -0
  221. package/hooks/genome-scribe-hook.ts +219 -0
  222. package/hooks/hooks.json +294 -0
  223. package/hooks/orient-nudge-hook.ts +242 -0
  224. package/hooks/policy-enforce.ts +214 -0
  225. package/hooks/post-tool-use-embedding.ts +93 -0
  226. package/hooks/post-tool-use-genome.sh +37 -0
  227. package/hooks/post-tool-use-genome.ts +69 -0
  228. package/hooks/posttooluse-correlate.ts +122 -0
  229. package/hooks/posttooluse-dedupe-output.ts +241 -0
  230. package/hooks/posttooluse-genome-refresh.ts +223 -0
  231. package/hooks/posttooluse-native-nudge.ts +205 -0
  232. package/hooks/posttooluse-stale-result.ts +277 -0
  233. package/hooks/pretooluse-bash.ts +63 -0
  234. package/hooks/pretooluse-budget-guard.ts +318 -0
  235. package/hooks/pretooluse-common.ts +985 -0
  236. package/hooks/pretooluse-eco-router.ts +196 -0
  237. package/hooks/pretooluse-edit.sh +93 -0
  238. package/hooks/pretooluse-edit.ts +197 -0
  239. package/hooks/pretooluse-glob.ts +70 -0
  240. package/hooks/pretooluse-grep.sh +85 -0
  241. package/hooks/pretooluse-grep.ts +96 -0
  242. package/hooks/pretooluse-notebookedit.ts +121 -0
  243. package/hooks/pretooluse-read.sh +118 -0
  244. package/hooks/pretooluse-read.ts +118 -0
  245. package/hooks/pretooluse-task.ts +130 -0
  246. package/hooks/pretooluse-webfetch.ts +66 -0
  247. package/hooks/pretooluse-websearch.ts +85 -0
  248. package/hooks/pretooluse-write.ts +128 -0
  249. package/hooks/pulse-emit.ts +197 -0
  250. package/hooks/session-end-consolidate.sh +35 -0
  251. package/hooks/session-end-consolidate.ts +188 -0
  252. package/hooks/session-end-stats-gc.ts +80 -0
  253. package/hooks/session-log-append.sh +94 -0
  254. package/hooks/session-log-append.ts +116 -0
  255. package/hooks/session-start.ts +993 -0
  256. package/hooks/sessionend-hook-health-nudge.ts +451 -0
  257. package/hooks/sessionend-savings-nudge.ts +318 -0
  258. package/hooks/sessionend-status-line-nudge.ts +296 -0
  259. package/hooks/sessionstart-brief.ts +140 -0
  260. package/hooks/sessionstart-cost-refactor.ts +95 -0
  261. package/hooks/sessionstart-efficient.ts +110 -0
  262. package/hooks/sessionstart-genome-author.ts +93 -0
  263. package/hooks/sessionstart-lean-tools.ts +98 -0
  264. package/hooks/sessionstart-search.ts +97 -0
  265. package/hooks/stop-accounting.ts +152 -0
  266. package/hooks/subagent-stop-rollup.ts +162 -0
  267. package/hooks/userpromptsubmit-brief-trigger.ts +156 -0
  268. package/package.json +56 -0
  269. package/ports/README.md +108 -0
  270. package/ports/cursor/mcp.json +11 -0
  271. package/ports/goose/recipe.yaml +26 -0
  272. package/scripts/ashlr-mcp.ts +40 -0
  273. package/scripts/auto-update.ts +177 -0
  274. package/scripts/baseline-scan.ts +831 -0
  275. package/scripts/bench-orchestrate.ts +377 -0
  276. package/scripts/benchmark-refs.ts +292 -0
  277. package/scripts/bootstrap.mjs +100 -0
  278. package/scripts/brief-eval.ts +234 -0
  279. package/scripts/bump-version.ts +82 -0
  280. package/scripts/bun-resolve.d.mts +11 -0
  281. package/scripts/bun-resolve.mjs +59 -0
  282. package/scripts/calibrate-grep.ts +467 -0
  283. package/scripts/capture-grep-workload.ts +260 -0
  284. package/scripts/check-tier.ts +61 -0
  285. package/scripts/check-version-sync.ts +97 -0
  286. package/scripts/cli-orchestrate-status.ts +386 -0
  287. package/scripts/cli-orchestrate.ts +303 -0
  288. package/scripts/cli.ts +478 -0
  289. package/scripts/cloud-smoke-test.ts +313 -0
  290. package/scripts/coach-report.ts +373 -0
  291. package/scripts/context-db-migrate.ts +137 -0
  292. package/scripts/context-status.ts +43 -0
  293. package/scripts/demo-run.ts +255 -0
  294. package/scripts/deploy-smoke.sh +140 -0
  295. package/scripts/doctor.ts +992 -0
  296. package/scripts/embed-file-worker.ts +104 -0
  297. package/scripts/embed-tune.ts +308 -0
  298. package/scripts/errors-report.ts +428 -0
  299. package/scripts/find-test-leak.ts +69 -0
  300. package/scripts/generate-badge.ts +357 -0
  301. package/scripts/genome-auto-consolidate.ts +533 -0
  302. package/scripts/genome-auto-propose.ts +578 -0
  303. package/scripts/genome-cloud-pull.ts +363 -0
  304. package/scripts/genome-cloud-push.ts +382 -0
  305. package/scripts/genome-cloud-sync.ts +587 -0
  306. package/scripts/genome-commit-watcher.ts +295 -0
  307. package/scripts/genome-init.ts +986 -0
  308. package/scripts/genome-key.ts +233 -0
  309. package/scripts/genome-keygen.ts +168 -0
  310. package/scripts/genome-link.ts +59 -0
  311. package/scripts/genome-refresh-worker.ts +364 -0
  312. package/scripts/genome-rewrap.ts +90 -0
  313. package/scripts/genome-synthesizer.ts +679 -0
  314. package/scripts/genome-team-init.ts +312 -0
  315. package/scripts/handoff-pack.ts +438 -0
  316. package/scripts/hook-bootstrap.mjs +75 -0
  317. package/scripts/hook-timing-reader.ts +371 -0
  318. package/scripts/hook-timings-report.ts +554 -0
  319. package/scripts/install-genome-hooks.ts +196 -0
  320. package/scripts/install-onnx-model.ts +154 -0
  321. package/scripts/install-permissions.ts +276 -0
  322. package/scripts/install-status-line.ts +150 -0
  323. package/scripts/mcp-entrypoint.sh +78 -0
  324. package/scripts/mcp-entrypoint.ts +130 -0
  325. package/scripts/mdx-angle-bracket-lint.ts +152 -0
  326. package/scripts/measure-cold-start.ts +126 -0
  327. package/scripts/migrate-stats-to-sqlite.ts +86 -0
  328. package/scripts/ollama-setup.ts +498 -0
  329. package/scripts/onboarding-wizard.ts +1691 -0
  330. package/scripts/orchestrate-emit-telemetry.ts +177 -0
  331. package/scripts/orchestrate-expand.ts +517 -0
  332. package/scripts/orchestrate-run.ts +744 -0
  333. package/scripts/print-legend.ts +50 -0
  334. package/scripts/product-metadata.ts +38 -0
  335. package/scripts/prune-old-memories.ts +208 -0
  336. package/scripts/publish.sh +88 -0
  337. package/scripts/read-calibration.ts +122 -0
  338. package/scripts/report-crash.ts +226 -0
  339. package/scripts/run-benchmark.ts +750 -0
  340. package/scripts/run-root-tests.ts +28 -0
  341. package/scripts/savings-dashboard.ts +1258 -0
  342. package/scripts/savings-report-extras.ts +447 -0
  343. package/scripts/savings-status-line.ts +873 -0
  344. package/scripts/session-event-emit.ts +266 -0
  345. package/scripts/session-greet.ts +686 -0
  346. package/scripts/session-log-report.ts +551 -0
  347. package/scripts/session-resume.ts +614 -0
  348. package/scripts/set-hook-mode.ts +83 -0
  349. package/scripts/smoke-cross-platform.ts +117 -0
  350. package/scripts/smoke-realtime.ts +257 -0
  351. package/scripts/smoke-tools.ts +21 -0
  352. package/scripts/stats-cloud-pull.ts +213 -0
  353. package/scripts/stats-cloud-sync.ts +261 -0
  354. package/scripts/telemetry-flush.ts +160 -0
  355. package/scripts/telemetry-status.ts +266 -0
  356. package/scripts/timing-budget.ts +35 -0
  357. package/scripts/ui-animation.ts +120 -0
  358. package/scripts/ui.ts +431 -0
  359. package/scripts/upgrade-flow.ts +775 -0
  360. package/scripts/weekly-digest.ts +394 -0
  361. package/servers/_accounting.ts +78 -0
  362. package/servers/_ask-router.ts +84 -0
  363. package/servers/_ast-chunker.ts +434 -0
  364. package/servers/_ast-helpers.ts +183 -0
  365. package/servers/_ast-languages.ts +153 -0
  366. package/servers/_ast-refactor/_shared.ts +221 -0
  367. package/servers/_ast-refactor/cross-file-rename.ts +560 -0
  368. package/servers/_ast-refactor/extract-function.ts +357 -0
  369. package/servers/_ast-refactor/file-local-rename.ts +172 -0
  370. package/servers/_ast-refactor.ts +41 -0
  371. package/servers/_ast-skeleton.ts +107 -0
  372. package/servers/_bash-summarizers-registry.ts +1096 -0
  373. package/servers/_crash-dump.ts +210 -0
  374. package/servers/_cwd-clamp.ts +342 -0
  375. package/servers/_edit-log.ts +28 -0
  376. package/servers/_edit-match.ts +236 -0
  377. package/servers/_edit-validate.ts +196 -0
  378. package/servers/_embed-calibration.ts +123 -0
  379. package/servers/_embedding-cache.ts +401 -0
  380. package/servers/_embedding-model.ts +329 -0
  381. package/servers/_events.ts +113 -0
  382. package/servers/_genome-cache.ts +154 -0
  383. package/servers/_genome-commits.ts +172 -0
  384. package/servers/_genome-crypto-v2.ts +242 -0
  385. package/servers/_genome-crypto.ts +259 -0
  386. package/servers/_genome-discoveries.ts +140 -0
  387. package/servers/_genome-embed-populator.ts +216 -0
  388. package/servers/_genome-freshness.ts +134 -0
  389. package/servers/_genome-issues.ts +171 -0
  390. package/servers/_genome-live.ts +263 -0
  391. package/servers/_genome-prs.ts +188 -0
  392. package/servers/_genome-search.ts +479 -0
  393. package/servers/_genome-sync.ts +297 -0
  394. package/servers/_history-tracker.ts +279 -0
  395. package/servers/_http-helpers.ts +151 -0
  396. package/servers/_identity-hash.ts +151 -0
  397. package/servers/_llm-providers/anthropic.ts +132 -0
  398. package/servers/_llm-providers/cloud.ts +195 -0
  399. package/servers/_llm-providers/index.ts +350 -0
  400. package/servers/_llm-providers/local.ts +127 -0
  401. package/servers/_llm-providers/onnx.ts +393 -0
  402. package/servers/_llm-providers/types.ts +27 -0
  403. package/servers/_manifest-v2.ts +447 -0
  404. package/servers/_mcp-host.ts +93 -0
  405. package/servers/_nudge-events.ts +451 -0
  406. package/servers/_orchestrate-executor.ts +316 -0
  407. package/servers/_prefetch.ts +435 -0
  408. package/servers/_pricing.ts +256 -0
  409. package/servers/_pro.ts +381 -0
  410. package/servers/_read-cache.ts +44 -0
  411. package/servers/_router-handlers.ts +46 -0
  412. package/servers/_router.ts +55 -0
  413. package/servers/_run-with-timeout.ts +173 -0
  414. package/servers/_savings-render.ts +214 -0
  415. package/servers/_stats-sqlite.ts +640 -0
  416. package/servers/_stats.ts +1183 -0
  417. package/servers/_status-line-cells.ts +469 -0
  418. package/servers/_streaks.ts +162 -0
  419. package/servers/_summarize.ts +208 -0
  420. package/servers/_task-graph-render.ts +217 -0
  421. package/servers/_task-graph.ts +545 -0
  422. package/servers/_telemetry.ts +719 -0
  423. package/servers/_test-parsers.ts +530 -0
  424. package/servers/_test-watch.ts +626 -0
  425. package/servers/_text-helpers.ts +37 -0
  426. package/servers/_token-measure.ts +160 -0
  427. package/servers/_tool-base.ts +248 -0
  428. package/servers/_weekly-digest.ts +391 -0
  429. package/servers/ask-server-handlers.ts +49 -0
  430. package/servers/ask-server.ts +174 -0
  431. package/servers/bash-server-handlers.ts +138 -0
  432. package/servers/bash-server.ts +1136 -0
  433. package/servers/bench.ts +186 -0
  434. package/servers/diff-semantic-server-handlers.ts +39 -0
  435. package/servers/diff-semantic-server.ts +566 -0
  436. package/servers/diff-server-handlers.ts +317 -0
  437. package/servers/diff-server.ts +20 -0
  438. package/servers/edit-server-handlers.ts +31 -0
  439. package/servers/edit-server.ts +209 -0
  440. package/servers/edit-structural-server-handlers.ts +322 -0
  441. package/servers/efficiency-server-handlers.ts +161 -0
  442. package/servers/efficiency-server.ts +1135 -0
  443. package/servers/flush-server-handlers.ts +21 -0
  444. package/servers/flush-server.ts +19 -0
  445. package/servers/genome-server-handlers.ts +118 -0
  446. package/servers/genome-server.ts +397 -0
  447. package/servers/github-server-handlers.ts +187 -0
  448. package/servers/github-server.ts +856 -0
  449. package/servers/glob-server-handlers.ts +233 -0
  450. package/servers/glob-server.ts +20 -0
  451. package/servers/grep-server-handlers.ts +61 -0
  452. package/servers/grep-server.ts +564 -0
  453. package/servers/http-server-handlers.ts +36 -0
  454. package/servers/http-server.ts +149 -0
  455. package/servers/logs-server-handlers.ts +42 -0
  456. package/servers/logs-server.ts +359 -0
  457. package/servers/ls-server-handlers.ts +166 -0
  458. package/servers/ls-server.ts +20 -0
  459. package/servers/multi-edit-server-handlers.ts +51 -0
  460. package/servers/multi-edit-server.ts +422 -0
  461. package/servers/notebook-edit-server-handlers.ts +34 -0
  462. package/servers/notebook-edit-server.ts +181 -0
  463. package/servers/orient-server-handlers.ts +52 -0
  464. package/servers/orient-server.ts +436 -0
  465. package/servers/pipe-server-handlers.ts +68 -0
  466. package/servers/pipe-server.ts +300 -0
  467. package/servers/read-server-handlers.ts +42 -0
  468. package/servers/read-server.ts +206 -0
  469. package/servers/rename-file-server-handlers.ts +67 -0
  470. package/servers/rename-file-server.ts +699 -0
  471. package/servers/savings-server-handlers.ts +27 -0
  472. package/servers/savings-server.ts +54 -0
  473. package/servers/search-replace-regex-server-handlers.ts +96 -0
  474. package/servers/search-replace-regex-server.ts +751 -0
  475. package/servers/sql-server-handlers.ts +58 -0
  476. package/servers/sql-server.ts +505 -0
  477. package/servers/task-server-handlers.ts +358 -0
  478. package/servers/task-server.ts +24 -0
  479. package/servers/test-server-handlers.ts +351 -0
  480. package/servers/test-server.ts +20 -0
  481. package/servers/tree-server-handlers.ts +503 -0
  482. package/servers/tree-server.ts +20 -0
  483. package/servers/webfetch-server-handlers.ts +166 -0
  484. package/servers/webfetch-server.ts +20 -0
  485. package/servers/websearch-server-handlers.ts +215 -0
  486. package/servers/websearch-server.ts +19 -0
  487. package/servers/write-server-handlers.ts +27 -0
  488. package/servers/write-server.ts +97 -0
  489. package/skills/ashlr-brief/SKILL.md +80 -0
  490. package/skills/ashlr-codex-doctor/SKILL.md +21 -0
  491. package/skills/ashlr-codex-efficient-tools/SKILL.md +17 -0
  492. package/skills/ashlr-codex-genome-refresh/SKILL.md +20 -0
  493. package/skills/ashlr-codex-parallel-explore/SKILL.md +20 -0
  494. package/skills/ashlr-codex-savings/SKILL.md +17 -0
  495. package/skills/ashlr-cost-refactor/SKILL.md +50 -0
  496. package/skills/ashlr-efficient/SKILL.md +64 -0
  497. package/skills/ashlr-genome-author/SKILL.md +43 -0
  498. package/skills/ashlr-lean-tools/SKILL.md +43 -0
  499. package/skills/ashlr-search/SKILL.md +46 -0
@@ -0,0 +1,434 @@
1
+ from __future__ import annotations
2
+
3
+ from functools import partial
4
+ import re
5
+ from typing import (
6
+ TYPE_CHECKING,
7
+ Any,
8
+ Literal,
9
+ Self,
10
+ )
11
+
12
+ import numpy as np
13
+
14
+ from pandas._libs import lib
15
+ from pandas.compat import (
16
+ HAS_PYARROW,
17
+ pa_version_under17p0,
18
+ pa_version_under21p0,
19
+ )
20
+
21
+ if HAS_PYARROW:
22
+ import pyarrow as pa
23
+ import pyarrow.compute as pc
24
+
25
+ if TYPE_CHECKING:
26
+ from collections.abc import Callable
27
+
28
+ from pandas._typing import Scalar
29
+
30
+
31
+ class ArrowStringArrayMixin:
32
+ _pa_array: pa.ChunkedArray
33
+
34
+ def __init__(self, *args, **kwargs) -> None:
35
+ raise NotImplementedError
36
+
37
+ def _from_pyarrow_array(self, pa_array) -> Self:
38
+ raise NotImplementedError
39
+
40
+ def _convert_bool_result(self, result, na=lib.no_default, method_name=None):
41
+ # Convert a bool-dtype result to the appropriate result type
42
+ raise NotImplementedError
43
+
44
+ def _convert_int_result(self, result):
45
+ # Convert an integer-dtype result to the appropriate result type
46
+ raise NotImplementedError
47
+
48
+ def _apply_elementwise(self, func: Callable) -> list[list[Any]]:
49
+ raise NotImplementedError
50
+
51
+ @staticmethod
52
+ def _has_unsupported_regex(pat: str | re.Pattern) -> bool:
53
+ """
54
+ Determine if regex pattern contains features not supported by RE2 / pyarrow.
55
+
56
+ This includes lookaround (lookahead or lookbehind) assertions and
57
+ backreferences.
58
+
59
+ Parameters
60
+ ----------
61
+ pat: str | re.Pattern
62
+ Regex pattern.
63
+
64
+ Returns
65
+ -------
66
+ bool
67
+ Whether `pat` contains a lookahead or lookbehind.
68
+ """
69
+ try:
70
+ # error: Module "re" has no attribute "_parser"
71
+ from re import _parser # type: ignore[attr-defined]
72
+
73
+ regex_parser = _parser.parse
74
+ except Exception as err:
75
+ raise type(err)(
76
+ "Incompatible version for regex; you will need to upgrade pandas "
77
+ "or downgrade Python"
78
+ ) from err
79
+
80
+ def has_unsupported_code(tokens):
81
+ # For certain op codes we need to recurse.
82
+ for op_code, argument in tokens:
83
+ if (
84
+ (
85
+ op_code == _parser.SUBPATTERN
86
+ and has_unsupported_code(argument[3])
87
+ )
88
+ or (
89
+ op_code == _parser.BRANCH
90
+ and any(has_unsupported_code(tokens) for tokens in argument[1])
91
+ )
92
+ or (
93
+ op_code
94
+ in [_parser.ASSERT_NOT, _parser.ASSERT, _parser.GROUPREF]
95
+ )
96
+ ):
97
+ return True
98
+ return False
99
+
100
+ str_pat = pat.pattern if isinstance(pat, re.Pattern) else pat
101
+ try:
102
+ tokens = regex_parser(str_pat)
103
+ except re.error:
104
+ # Pattern not valid for Python's re (e.g. RE2 syntax like \x{...} or \p)
105
+ # Let the pyarrow backend handle it.
106
+ return False
107
+ return has_unsupported_code(tokens)
108
+
109
+ def _str_len(self):
110
+ result = pc.utf8_length(self._pa_array)
111
+ return self._convert_int_result(result)
112
+
113
+ def _str_lower(self) -> Self:
114
+ return self._from_pyarrow_array(pc.utf8_lower(self._pa_array))
115
+
116
+ def _str_upper(self) -> Self:
117
+ return self._from_pyarrow_array(pc.utf8_upper(self._pa_array))
118
+
119
+ def _str_strip(self, to_strip=None) -> Self:
120
+ if to_strip is None:
121
+ result = pc.utf8_trim_whitespace(self._pa_array)
122
+ else:
123
+ result = pc.utf8_trim(self._pa_array, characters=to_strip)
124
+ return self._from_pyarrow_array(result)
125
+
126
+ def _str_lstrip(self, to_strip=None) -> Self:
127
+ if to_strip is None:
128
+ result = pc.utf8_ltrim_whitespace(self._pa_array)
129
+ else:
130
+ result = pc.utf8_ltrim(self._pa_array, characters=to_strip)
131
+ return self._from_pyarrow_array(result)
132
+
133
+ def _str_rstrip(self, to_strip=None) -> Self:
134
+ if to_strip is None:
135
+ result = pc.utf8_rtrim_whitespace(self._pa_array)
136
+ else:
137
+ result = pc.utf8_rtrim(self._pa_array, characters=to_strip)
138
+ return self._from_pyarrow_array(result)
139
+
140
+ def _str_pad(
141
+ self,
142
+ width: int,
143
+ side: Literal["left", "right", "both"] = "left",
144
+ fillchar: str = " ",
145
+ ) -> Self:
146
+ if side == "left":
147
+ pa_pad = pc.utf8_lpad
148
+ elif side == "right":
149
+ pa_pad = pc.utf8_rpad
150
+ elif side == "both":
151
+ if pa_version_under17p0:
152
+ # GH#59624 fall back to object dtype
153
+ from pandas import array
154
+
155
+ obj_arr = self.astype(object, copy=False) # type: ignore[attr-defined]
156
+ obj = array(obj_arr, dtype=object)
157
+ result = obj._str_pad(width, side, fillchar) # type: ignore[attr-defined]
158
+ return type(self)._from_sequence(result, dtype=self.dtype) # type: ignore[attr-defined]
159
+ else:
160
+ # GH#54792
161
+ # https://github.com/apache/arrow/issues/15053#issuecomment-2317032347
162
+ lean_left = (width % 2) == 0
163
+ pa_pad = partial(pc.utf8_center, lean_left_on_odd_padding=lean_left)
164
+ else:
165
+ raise ValueError(
166
+ f"Invalid side: {side}. Side must be one of 'left', 'right', 'both'"
167
+ )
168
+ return self._from_pyarrow_array(
169
+ pa_pad(self._pa_array, width=width, padding=fillchar)
170
+ )
171
+
172
+ def _str_get(self, i: int) -> Self:
173
+ lengths = pc.utf8_length(self._pa_array)
174
+ if i >= 0:
175
+ out_of_bounds = pc.greater_equal(i, lengths)
176
+ start = i
177
+ stop = i + 1
178
+ step = 1
179
+ else:
180
+ out_of_bounds = pc.greater(-i, lengths)
181
+ start = i
182
+ stop = i - 1
183
+ step = -1
184
+ not_out_of_bounds = pc.invert(out_of_bounds.fill_null(True))
185
+ selected = pc.utf8_slice_codeunits(
186
+ self._pa_array, start=start, stop=stop, step=step
187
+ )
188
+ null_value = pa.scalar(None, type=self._pa_array.type)
189
+ result = pc.if_else(not_out_of_bounds, selected, null_value)
190
+ return self._from_pyarrow_array(result)
191
+
192
+ def _str_slice(
193
+ self, start: int | None = None, stop: int | None = None, step: int | None = None
194
+ ) -> Self:
195
+ if start is None:
196
+ if step is not None and step < 0:
197
+ # GH#59710
198
+ start = -1
199
+ else:
200
+ start = 0
201
+ if step is None:
202
+ step = 1
203
+ return self._from_pyarrow_array(
204
+ pc.utf8_slice_codeunits(self._pa_array, start=start, stop=stop, step=step)
205
+ )
206
+
207
+ def _str_slice_replace(
208
+ self, start: int | None = None, stop: int | None = None, repl: str | None = None
209
+ ) -> Self:
210
+ if repl is None:
211
+ repl = ""
212
+ if start is None:
213
+ start = 0
214
+ if stop is None:
215
+ stop = np.iinfo(np.int64).max
216
+ return self._from_pyarrow_array(
217
+ pc.utf8_replace_slice(self._pa_array, start, stop, repl)
218
+ )
219
+
220
+ def _str_replace(
221
+ self,
222
+ pat: str | re.Pattern,
223
+ repl: str | Callable,
224
+ n: int = -1,
225
+ case: bool = True,
226
+ flags: int = 0,
227
+ regex: bool = True,
228
+ ) -> Self:
229
+ if (
230
+ isinstance(pat, re.Pattern)
231
+ or callable(repl)
232
+ or not case
233
+ or flags
234
+ or (isinstance(repl, str) and r"\g<" in repl)
235
+ ):
236
+ raise NotImplementedError(
237
+ "replace is not supported with a re.Pattern, callable repl, "
238
+ "case=False, flags!=0, or when the replacement string contains "
239
+ "named group references (\\g<...>)"
240
+ )
241
+
242
+ func = pc.replace_substring_regex if regex else pc.replace_substring
243
+ # https://github.com/apache/arrow/issues/39149
244
+ # GH 56404, unexpected behavior with negative max_replacements with pyarrow.
245
+ pa_max_replacements = None if n < 0 else n
246
+ result = func(
247
+ self._pa_array,
248
+ pattern=pat,
249
+ replacement=repl,
250
+ max_replacements=pa_max_replacements,
251
+ )
252
+ return self._from_pyarrow_array(result)
253
+
254
+ def _str_capitalize(self) -> Self:
255
+ return self._from_pyarrow_array(pc.utf8_capitalize(self._pa_array))
256
+
257
+ def _str_title(self) -> Self:
258
+ return self._from_pyarrow_array(pc.utf8_title(self._pa_array))
259
+
260
+ def _str_swapcase(self) -> Self:
261
+ return self._from_pyarrow_array(pc.utf8_swapcase(self._pa_array))
262
+
263
+ def _str_removeprefix(self, prefix: str):
264
+ if prefix == "":
265
+ return self._from_pyarrow_array(self._pa_array)
266
+ starts_with = pc.starts_with(self._pa_array, pattern=prefix)
267
+ removed = pc.utf8_slice_codeunits(self._pa_array, len(prefix))
268
+ result = pc.if_else(starts_with, removed, self._pa_array)
269
+ return self._from_pyarrow_array(result)
270
+
271
+ def _str_removesuffix(self, suffix: str):
272
+ if suffix == "":
273
+ return self._from_pyarrow_array(self._pa_array)
274
+ ends_with = pc.ends_with(self._pa_array, pattern=suffix)
275
+ removed = pc.utf8_slice_codeunits(self._pa_array, 0, stop=-len(suffix))
276
+ result = pc.if_else(ends_with, removed, self._pa_array)
277
+ return self._from_pyarrow_array(result)
278
+
279
+ def _str_startswith(
280
+ self, pat: str | tuple[str, ...], na: Scalar | lib.NoDefault = lib.no_default
281
+ ):
282
+ if isinstance(pat, str):
283
+ result = pc.starts_with(self._pa_array, pattern=pat)
284
+ elif len(pat) == 0:
285
+ # For empty tuple we return null for missing values and False
286
+ # for valid values.
287
+ result = pc.if_else(pc.is_null(self._pa_array), None, False)
288
+ else:
289
+ result = pc.starts_with(self._pa_array, pattern=pat[0])
290
+
291
+ for p in pat[1:]:
292
+ result = pc.or_(result, pc.starts_with(self._pa_array, pattern=p))
293
+ return self._convert_bool_result(result, na=na, method_name="startswith")
294
+
295
+ def _str_endswith(
296
+ self, pat: str | tuple[str, ...], na: Scalar | lib.NoDefault = lib.no_default
297
+ ):
298
+ if isinstance(pat, str):
299
+ result = pc.ends_with(self._pa_array, pattern=pat)
300
+ elif len(pat) == 0:
301
+ # For empty tuple we return null for missing values and False
302
+ # for valid values.
303
+ result = pc.if_else(pc.is_null(self._pa_array), None, False)
304
+ else:
305
+ result = pc.ends_with(self._pa_array, pattern=pat[0])
306
+
307
+ for p in pat[1:]:
308
+ result = pc.or_(result, pc.ends_with(self._pa_array, pattern=p))
309
+ return self._convert_bool_result(result, na=na, method_name="endswith")
310
+
311
+ def _str_isalnum(self):
312
+ result = pc.utf8_is_alnum(self._pa_array)
313
+ return self._convert_bool_result(result)
314
+
315
+ def _str_isalpha(self):
316
+ result = pc.utf8_is_alpha(self._pa_array)
317
+ return self._convert_bool_result(result)
318
+
319
+ def _str_isascii(self):
320
+ result = pc.string_is_ascii(self._pa_array)
321
+ return self._convert_bool_result(result)
322
+
323
+ def _str_isdecimal(self):
324
+ result = pc.utf8_is_decimal(self._pa_array)
325
+ return self._convert_bool_result(result)
326
+
327
+ def _str_isdigit(self):
328
+ if pa_version_under21p0:
329
+ # https://github.com/pandas-dev/pandas/issues/61466
330
+ res_list = self._apply_elementwise(str.isdigit)
331
+ return self._convert_bool_result(
332
+ pa.chunked_array(res_list, type=pa.bool_())
333
+ )
334
+ result = pc.utf8_is_digit(self._pa_array)
335
+ return self._convert_bool_result(result)
336
+
337
+ def _str_islower(self):
338
+ result = pc.utf8_is_lower(self._pa_array)
339
+ return self._convert_bool_result(result)
340
+
341
+ def _str_isnumeric(self):
342
+ result = pc.utf8_is_numeric(self._pa_array)
343
+ return self._convert_bool_result(result)
344
+
345
+ def _str_isspace(self):
346
+ result = pc.utf8_is_space(self._pa_array)
347
+ return self._convert_bool_result(result)
348
+
349
+ def _str_istitle(self):
350
+ result = pc.utf8_is_title(self._pa_array)
351
+ return self._convert_bool_result(result)
352
+
353
+ def _str_isupper(self):
354
+ result = pc.utf8_is_upper(self._pa_array)
355
+ return self._convert_bool_result(result)
356
+
357
+ def _str_contains(
358
+ self,
359
+ pat,
360
+ case: bool = True,
361
+ flags: int = 0,
362
+ na: Scalar | lib.NoDefault = lib.no_default,
363
+ regex: bool = True,
364
+ ):
365
+ if flags:
366
+ raise NotImplementedError(f"contains not implemented with {flags=}")
367
+
368
+ if regex:
369
+ pa_contains = pc.match_substring_regex
370
+ else:
371
+ pa_contains = pc.match_substring
372
+ result = pa_contains(self._pa_array, pat, ignore_case=not case)
373
+ return self._convert_bool_result(result, na=na, method_name="contains")
374
+
375
+ def _str_match(
376
+ self,
377
+ pat: str,
378
+ case: bool = True,
379
+ flags: int = 0,
380
+ na: Scalar | lib.NoDefault = lib.no_default,
381
+ ):
382
+ if not pat.startswith("^"):
383
+ pat = f"^({pat})"
384
+ return ArrowStringArrayMixin._str_contains(
385
+ self, pat, case, flags, na, regex=True
386
+ )
387
+
388
+ def _str_fullmatch(
389
+ self,
390
+ pat: str,
391
+ case: bool = True,
392
+ flags: int = 0,
393
+ na: Scalar | lib.NoDefault = lib.no_default,
394
+ ):
395
+ if (not pat.endswith("$") or pat.endswith("\\$")) and not pat.startswith("^"):
396
+ pat = f"^({pat})$"
397
+ elif not pat.endswith("$") or pat.endswith("\\$"):
398
+ pat = f"^({pat[1:]})$"
399
+ elif not pat.startswith("^"):
400
+ pat = f"^({pat[0:-1]})$"
401
+ return ArrowStringArrayMixin._str_match(self, pat, case, flags, na)
402
+
403
+ def _str_find(self, sub: str, start: int = 0, end: int | None = None):
404
+ if not pc.all(pc.string_is_ascii(self._pa_array)).as_py():
405
+ # GH#64123 - pc.find_substring returns byte offsets instead of
406
+ # character offsets for multi-byte UTF-8 characters, so we fall back
407
+ # to Python str.find which correctly returns character offsets.
408
+ res_list = self._apply_elementwise(lambda val: val.find(sub, start, end))
409
+ return self._convert_int_result(pa.chunked_array(res_list))
410
+
411
+ if (start == 0 or start is None) and end is None:
412
+ result = pc.find_substring(self._pa_array, sub)
413
+ else:
414
+ if sub == "":
415
+ # GH#56792
416
+ res_list = self._apply_elementwise(
417
+ lambda val: val.find(sub, start, end)
418
+ )
419
+ return self._convert_int_result(pa.chunked_array(res_list))
420
+ if start is None:
421
+ start_offset = 0
422
+ start = 0
423
+ elif start < 0:
424
+ start_offset = pc.add(start, pc.utf8_length(self._pa_array))
425
+ start_offset = pc.if_else(pc.less(start_offset, 0), 0, start_offset)
426
+ else:
427
+ start_offset = start
428
+ slices = pc.utf8_slice_codeunits(self._pa_array, start, stop=end)
429
+ result = pc.find_substring(slices, sub)
430
+ found = pc.not_equal(result, pa.scalar(-1, type=result.type))
431
+ offset_result = pc.add(result, start_offset)
432
+ result = pc.if_else(found, offset_result, -1)
433
+ result = result.cast(pa.int64())
434
+ return self._convert_int_result(result)