| author | |
| committer | |
| log | 790fda1a97476e4d7048a521651180ed0ba811c3 |
| tree | 62387c0a906896018a2d6518b9cb16d3954cda3f |
| parent | 89ffcf42eb781eddf357c07199607e3d7bccf0c5 |
| signature | Signed by PGP key B5690EEEBB952194 |
3 files changed, 284 insertions(+), 0 deletions(-)
.github/ISSUE_TEMPLATE/bug_report.yml created+108| ... | @@ -0,0 +1,108 @@ | ||
| 1 | name: Bug report | ||
| 2 | description: Report broken behavior, regressions, crashes, or reliability issues. | ||
| 3 | title: "[Bug]: " | ||
| 4 | labels: | ||
| 5 | - bug | ||
| 6 | - needs-triage | ||
| 7 | body: | ||
| 8 | - type: markdown | ||
| 9 | attributes: | ||
| 10 | value: | | ||
| 11 | Use this form for broken behavior, regressions, crashes, or reliability problems. | ||
| 12 | Search existing issues first and keep the report focused on one problem. | ||
| 13 | |||
| 14 | - type: checkboxes | ||
| 15 | id: checks | ||
| 16 | attributes: | ||
| 17 | label: Before submitting | ||
| 18 | options: | ||
| 19 | - label: I searched existing issues and did not find a duplicate. | ||
| 20 | required: true | ||
| 21 | - label: I included enough detail to reproduce or investigate the problem. | ||
| 22 | required: true | ||
| 23 | |||
| 24 | - type: dropdown | ||
| 25 | id: area | ||
| 26 | attributes: | ||
| 27 | label: Area | ||
| 28 | description: Which part of the project is affected? | ||
| 29 | options: | ||
| 30 | - apps/web | ||
| 31 | - apps/server | ||
| 32 | - apps/desktop | ||
| 33 | - packages/contracts or packages/shared | ||
| 34 | - Build, CI, or release tooling | ||
| 35 | - Docs | ||
| 36 | - Not sure | ||
| 37 | validations: | ||
| 38 | required: true | ||
| 39 | |||
| 40 | - type: textarea | ||
| 41 | id: steps | ||
| 42 | attributes: | ||
| 43 | label: Steps to reproduce | ||
| 44 | description: Provide a minimal, deterministic repro. | ||
| 45 | placeholder: | | ||
| 46 | 1. Start the app with ... | ||
| 47 | 2. Open ... | ||
| 48 | 3. Disconnect the network | ||
| 49 | 4. Reconnect and send another prompt | ||
| 50 | validations: | ||
| 51 | required: true | ||
| 52 | |||
| 53 | - type: textarea | ||
| 54 | id: expected | ||
| 55 | attributes: | ||
| 56 | label: Expected behavior | ||
| 57 | placeholder: The thread should resume normally and accept the new message. | ||
| 58 | validations: | ||
| 59 | required: true | ||
| 60 | |||
| 61 | - type: textarea | ||
| 62 | id: actual | ||
| 63 | attributes: | ||
| 64 | label: Actual behavior | ||
| 65 | placeholder: The composer clears, no new turn starts, and the session stays in a pending state. | ||
| 66 | validations: | ||
| 67 | required: true | ||
| 68 | |||
| 69 | - type: dropdown | ||
| 70 | id: impact | ||
| 71 | attributes: | ||
| 72 | label: Impact | ||
| 73 | description: How bad is this in practice? | ||
| 74 | options: | ||
| 75 | - Blocks work completely | ||
| 76 | - Major degradation or frequent failure | ||
| 77 | - Minor bug or occasional failure | ||
| 78 | - Cosmetic issue | ||
| 79 | validations: | ||
| 80 | required: true | ||
| 81 | |||
| 82 | - type: input | ||
| 83 | id: version | ||
| 84 | attributes: | ||
| 85 | label: Version or commit | ||
| 86 | description: Release version, commit SHA, or branch name if known. | ||
| 87 | placeholder: main @ abc1234 | ||
| 88 | |||
| 89 | - type: input | ||
| 90 | id: environment | ||
| 91 | attributes: | ||
| 92 | label: Environment | ||
| 93 | description: OS, browser or desktop app version, Node/Bun version, provider/model if relevant. | ||
| 94 | placeholder: macOS 15.3, Chrome 135, Bun 1.3.9, Codex app-server ... | ||
| 95 | |||
| 96 | - type: textarea | ||
| 97 | id: logs | ||
| 98 | attributes: | ||
| 99 | label: Logs, stack traces, or screenshots | ||
| 100 | description: Paste the most relevant output only. Redact secrets. | ||
| 101 | render: shell | ||
| 102 | |||
| 103 | - type: textarea | ||
| 104 | id: workaround | ||
| 105 | attributes: | ||
| 106 | label: Workaround | ||
| 107 | description: If you found a temporary workaround, include it. | ||
| 108 | placeholder: Restarting the provider session clears the stuck state. | ||
.github/ISSUE_TEMPLATE/feature_request.yml created+101| ... | @@ -0,0 +1,101 @@ | ||
| 1 | name: Feature request | ||
| 2 | description: Propose a scoped improvement or new capability. | ||
| 3 | title: "[Feature]: " | ||
| 4 | labels: | ||
| 5 | - enhancement | ||
| 6 | - needs-triage | ||
| 7 | body: | ||
| 8 | - type: markdown | ||
| 9 | attributes: | ||
| 10 | value: | | ||
| 11 | Use this form for new capabilities or meaningful improvements to existing behavior. | ||
| 12 | This repo is still early. Small, concrete requests that clearly explain the problem and scope are much easier to evaluate. | ||
| 13 | |||
| 14 | - type: checkboxes | ||
| 15 | id: checks | ||
| 16 | attributes: | ||
| 17 | label: Before submitting | ||
| 18 | options: | ||
| 19 | - label: I searched existing issues and did not find a duplicate. | ||
| 20 | required: true | ||
| 21 | - label: I am describing a concrete problem or use case, not just a vague idea. | ||
| 22 | required: true | ||
| 23 | |||
| 24 | - type: dropdown | ||
| 25 | id: area | ||
| 26 | attributes: | ||
| 27 | label: Area | ||
| 28 | description: Which part of the project would this change affect? | ||
| 29 | options: | ||
| 30 | - apps/web | ||
| 31 | - apps/server | ||
| 32 | - apps/desktop | ||
| 33 | - packages/contracts or packages/shared | ||
| 34 | - Build, CI, or release tooling | ||
| 35 | - Docs | ||
| 36 | - Not sure | ||
| 37 | validations: | ||
| 38 | required: true | ||
| 39 | |||
| 40 | - type: textarea | ||
| 41 | id: problem | ||
| 42 | attributes: | ||
| 43 | label: Problem or use case | ||
| 44 | description: What are you trying to do? What is hard, slow, or impossible today? | ||
| 45 | placeholder: I want to reconnect to an existing provider session after a browser refresh without losing the current thread state. | ||
| 46 | validations: | ||
| 47 | required: true | ||
| 48 | |||
| 49 | - type: textarea | ||
| 50 | id: proposal | ||
| 51 | attributes: | ||
| 52 | label: Proposed solution | ||
| 53 | description: Describe the behavior, API, or UX you want. | ||
| 54 | placeholder: Persist enough session metadata so the client can discover and reattach to the active provider session on load. | ||
| 55 | validations: | ||
| 56 | required: true | ||
| 57 | |||
| 58 | - type: textarea | ||
| 59 | id: value | ||
| 60 | attributes: | ||
| 61 | label: Why this matters | ||
| 62 | description: Who benefits, and what outcome does this unlock? | ||
| 63 | placeholder: This would make reconnects predictable during network drops and reduce accidental duplicate sessions. | ||
| 64 | validations: | ||
| 65 | required: true | ||
| 66 | |||
| 67 | - type: textarea | ||
| 68 | id: scope | ||
| 69 | attributes: | ||
| 70 | label: Smallest useful scope | ||
| 71 | description: What is the narrowest version of this request that would still solve your problem? | ||
| 72 | placeholder: A first pass only needs to support restoring the active session for the current thread. | ||
| 73 | validations: | ||
| 74 | required: true | ||
| 75 | |||
| 76 | - type: textarea | ||
| 77 | id: alternatives | ||
| 78 | attributes: | ||
| 79 | label: Alternatives considered | ||
| 80 | description: Workarounds, prior art, or other approaches you considered. | ||
| 81 | placeholder: I currently work around this by manually restarting the provider session, but that loses in-flight context. | ||
| 82 | |||
| 83 | - type: textarea | ||
| 84 | id: tradeoffs | ||
| 85 | attributes: | ||
| 86 | label: Risks or tradeoffs | ||
| 87 | description: What costs, complexity, or edge cases should be considered? | ||
| 88 | placeholder: This may require careful handling when the underlying provider session has already exited. | ||
| 89 | |||
| 90 | - type: textarea | ||
| 91 | id: references | ||
| 92 | attributes: | ||
| 93 | label: Examples or references | ||
| 94 | description: Links, screenshots, mockups, or comparable tools. | ||
| 95 | |||
| 96 | - type: checkboxes | ||
| 97 | id: contribution | ||
| 98 | attributes: | ||
| 99 | label: Contribution | ||
| 100 | options: | ||
| 101 | - label: I would be open to helping implement this. | ||
.github/workflows/issue-labels.yml created+75| ... | @@ -0,0 +1,75 @@ | ||
| 1 | name: Issue Labels | ||
| 2 | |||
| 3 | on: | ||
| 4 | push: | ||
| 5 | branches: | ||
| 6 | - main | ||
| 7 | paths: | ||
| 8 | - .github/ISSUE_TEMPLATE/** | ||
| 9 | - .github/workflows/issue-labels.yml | ||
| 10 | workflow_dispatch: | ||
| 11 | |||
| 12 | permissions: | ||
| 13 | issues: write | ||
| 14 | |||
| 15 | jobs: | ||
| 16 | sync: | ||
| 17 | name: Sync issue labels | ||
| 18 | runs-on: ubuntu-24.04 | ||
| 19 | steps: | ||
| 20 | - name: Ensure managed issue labels exist | ||
| 21 | uses: actions/github-script@v7 | ||
| 22 | with: | ||
| 23 | script: | | ||
| 24 | const managedLabels = [ | ||
| 25 | { | ||
| 26 | name: "bug", | ||
| 27 | color: "d73a4a", | ||
| 28 | description: "Something is broken or behaving incorrectly.", | ||
| 29 | }, | ||
| 30 | { | ||
| 31 | name: "enhancement", | ||
| 32 | color: "a2eeef", | ||
| 33 | description: "Requested improvement or new capability.", | ||
| 34 | }, | ||
| 35 | { | ||
| 36 | name: "needs-triage", | ||
| 37 | color: "fbca04", | ||
| 38 | description: "Issue needs maintainer review and initial categorization.", | ||
| 39 | }, | ||
| 40 | ]; | ||
| 41 | |||
| 42 | for (const label of managedLabels) { | ||
| 43 | try { | ||
| 44 | const { data: existing } = await github.rest.issues.getLabel({ | ||
| 45 | owner: context.repo.owner, | ||
| 46 | repo: context.repo.repo, | ||
| 47 | name: label.name, | ||
| 48 | }); | ||
| 49 | |||
| 50 | if ( | ||
| 51 | existing.color !== label.color || | ||
| 52 | (existing.description ?? "") !== label.description | ||
| 53 | ) { | ||
| 54 | await github.rest.issues.updateLabel({ | ||
| 55 | owner: context.repo.owner, | ||
| 56 | repo: context.repo.repo, | ||
| 57 | name: label.name, | ||
| 58 | color: label.color, | ||
| 59 | description: label.description, | ||
| 60 | }); | ||
| 61 | } | ||
| 62 | } catch (error) { | ||
| 63 | if (error.status !== 404) { | ||
| 64 | throw error; | ||
| 65 | } | ||
| 66 | |||
| 67 | await github.rest.issues.createLabel({ | ||
| 68 | owner: context.repo.owner, | ||
| 69 | repo: context.repo.repo, | ||
| 70 | name: label.name, | ||
| 71 | color: label.color, | ||
| 72 | description: label.description, | ||
| 73 | }); | ||
| 74 | } | ||
| 75 | } | ||