Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(frontend): add "Copy AI context" button #1092

Merged
merged 1 commit into from
Aug 21, 2024
Merged

Conversation

anupcowkur
Copy link
Contributor

@anupcowkur anupcowkur commented Aug 21, 2024

closes #1025

This commit adds a "Copy AI context" button to crash/ANR details page.

This button copies key attributes and stack traces to the clipboard along with a prompt.

The intention is to make it easy for developers
to paste this context into an LLM of their choice and get help in debugging.

Sample context that gets copied:

I am trying to fix an exception in my Android app. The details of the exception are as follows: 

App Name: Sample
App version: 1.0
Date & time: Thu, 25 Jul, 2024, 12:14:07:239 PM
Platform: android
Device: Googlesdk_gphone64_arm64
Network type: wifi

STACK TRACES:
Thread: main
Stacktrace:
    java.lang.IllegalAccessException: This is a new exception
        at sh.measure.sample.ExceptionDemoActivity.onCreate$lambda$0(ExceptionDemoActivity.kt:21)
        at sh.measure.sample.ExceptionDemoActivity.$r8$lambda$Q_ui1nZ8w7tXFl-UGrB13ccXmnU
        at sh.measure.sample.ExceptionDemoActivity$$ExternalSyntheticLambda3.onClick(D8$$SyntheticClass)
        at android.view.View.performClick(View.java:7506)
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1218)
        at android.view.View.performClickInternal(View.java:7483)
        at android.view.View.-$$Nest$mperformClickInternal
        at android.view.View$PerformClick.run(View.java:29334)
        at android.os.Handler.handleCallback(Handler.java:942)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7872)
        at java.lang.reflect.Method.invoke(Method.java:-2)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
    Caused by: java.lang.IllegalAccessException: This is a new exception
        at java.lang.reflect.Method.invoke(Method.java:-2)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
    Caused by: java.lang.reflect.InvocationTargetException
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:558)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

Thread: Okio Watchdog
Stacktrace:
    jdk.internal.misc.Unsafe.park(Unsafe.java:-2)
    java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:234)
    java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2211)
    okio.AsyncTimeout$Companion.awaitTimeout(AsyncTimeout.kt:370)
    okio.AsyncTimeout$Watchdog.run(AsyncTimeout.kt:211)

Thread: msr-default
Stacktrace:
    jdk.internal.misc.Unsafe.park(Unsafe.java:-2)
    java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:234)
    java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2123)
    java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1188)
    java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:905)
    java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1063)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1123)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
    java.lang.Thread.run(Thread.java:1012)

Thread: LeakCanary-Heap-Dump
Stacktrace:
    android.os.MessageQueue.nativePollOnce(MessageQueue.java:-2)
    android.os.MessageQueue.next(MessageQueue.java:335)
    android.os.Looper.loopOnce(Looper.java:161)
    android.os.Looper.loop(Looper.java:288)
    android.os.HandlerThread.run(HandlerThread.java:67)

Thread: FinalizerDaemon
Stacktrace:
    java.lang.Object.wait(Object.java:-2)
    java.lang.Object.wait(Object.java:442)
    java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:203)
    java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:224)
    java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:300)
    java.lang.Daemons$Daemon.run(Daemons.java:140)
    java.lang.Thread.run(Thread.java:1012)

Thread: OkHttp TaskRunner
Stacktrace:
    java.lang.Object.wait(Object.java:-2)
    okhttp3.internal.concurrent.TaskRunner$RealBackend.coordinatorWait(TaskRunner.kt:294)
    okhttp3.internal.concurrent.TaskRunner.awaitTaskToRun(TaskRunner.kt:218)
    okhttp3.internal.concurrent.TaskRunner$runnable$1.run(TaskRunner.kt:59)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
    java.lang.Thread.run(Thread.java:1012)

Thread: ReferenceQueueDaemon
Stacktrace:
    java.lang.Object.wait(Object.java:-2)
    java.lang.Object.wait(Object.java:442)
    java.lang.Object.wait(Object.java:568)
    java.lang.Daemons$ReferenceQueueDaemon.runInternal(Daemons.java:232)
    java.lang.Daemons$Daemon.run(Daemons.java:140)
    java.lang.Thread.run(Thread.java:1012)

Thread: msr-io
Stacktrace:
    jdk.internal.misc.Unsafe.park(Unsafe.java:-2)
    java.util.concurrent.locks.LockSupport.park(LockSupport.java:194)
    java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2081)
    java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1176)
    java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:905)
    java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1063)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1123)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
    java.lang.Thread.run(Thread.java:1012)

Thread: FinalizerWatchdogDaemon
Stacktrace:
    java.lang.Object.wait(Object.java:-2)
    java.lang.Object.wait(Object.java:442)
    java.lang.Object.wait(Object.java:568)
    java.lang.Daemons$FinalizerWatchdogDaemon.sleepUntilNeeded(Daemons.java:385)
    java.lang.Daemons$FinalizerWatchdogDaemon.runInternal(Daemons.java:365)
    java.lang.Daemons$Daemon.run(Daemons.java:140)
    java.lang.Thread.run(Thread.java:1012)

Thread: queued-work-looper
Stacktrace:
    android.os.MessageQueue.nativePollOnce(MessageQueue.java:-2)
    android.os.MessageQueue.next(MessageQueue.java:335)
    android.os.Looper.loopOnce(Looper.java:161)
    android.os.Looper.loop(Looper.java:288)
    android.os.HandlerThread.run(HandlerThread.java:67)



Please help me debug this issue

closes #1025

This commit adds a "Copy AI context" button to crash/ANR
details page.

This button copies key attributes and stack traces to
the clipboard along with a prompt.

The intention is to make it easy for developers
to paste this context into an LLM of their choice and get
help in debugging.
@anupcowkur anupcowkur requested a review from detj August 21, 2024 12:20
Copy link

vercel bot commented Aug 21, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
measure-dashboard ✅ Ready (Inspect) Visit Preview 💬 Add feedback Aug 21, 2024 0:21am

@anupcowkur anupcowkur merged commit 12f1e2b into main Aug 21, 2024
6 checks passed
@anupcowkur anupcowkur deleted the copy-ai-context branch August 21, 2024 12:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

feat(webapp): add button to copy issue context formatted for pasting into LLM bots
2 participants