Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1930 commits
Select commit Hold shift + click to select a range
d447026
chore(deps-dev): bump knip in the npm-minor-patch group (#2575)
dependabot[bot] Jul 24, 2026
1141af8
chore(deps): bump js-yaml from 4.2.0 to 4.3.0 (#2576)
dependabot[bot] Jul 24, 2026
d992315
chore: v2 - bring floating windows into viewport (#2577)
maxy-shpfy Jul 27, 2026
5b4e5a8
chore(deps-dev): bump @testing-library/jest-dom from 6.9.1 to 7.0.0 (…
dependabot[bot] Jul 27, 2026
747b22e
fix: v2 - runview - show argumentvalue in input node (#2582)
maxy-shpfy Jul 28, 2026
ccfdd38
fix: v2 runview - cancel button style in floating mode (#2583)
maxy-shpfy Jul 28, 2026
ffae50a
chore: v2 - runview - improve input node value display (#2581)
maxy-shpfy Jul 28, 2026
6b65f9d
chore: gardening improvements (#2586)
camielvs Jul 29, 2026
0c510ff
fix: v2 - support value and default in input nodes (#2589)
maxy-shpfy Jul 30, 2026
e9d694f
chore: v2 - sync behavior to validation fix resolution (#2590)
maxy-shpfy Jul 30, 2026
e47014f
feat: Return Home button on Loading Screen (#2584)
camielvs Jul 30, 2026
3237149
chore: Improvements to AI & Code Comments (#2594)
camielvs Jul 30, 2026
d4f9a44
chore(deps): bump eslint-plugin-simple-import-sort from 13.0.0 to 14.…
dependabot[bot] Jul 30, 2026
6f4beb1
chore(deps): bump js-yaml from 4.3.0 to 4.3.1 (#2609)
dependabot[bot] Aug 4, 2026
31eb41a
fix: v2 runview - add task annotations section (#2606)
maxy-shpfy Aug 4, 2026
98c9f23
Adds the ability to see more components in the search results (#2615)
Mbeaulne Aug 12, 2026
b562ea9
feat: Improve Parquet Viewer (#2557)
camielvs Aug 13, 2026
896b086
feat: Improve Table Previews (#2593)
camielvs Aug 13, 2026
cf50564
feat: Artifact Previews on v2 Runs Output Nodes (#2588)
camielvs Aug 13, 2026
cf2ed8e
chore: v2 runview - split task annotations into user and system sect…
maxy-shpfy Aug 13, 2026
2bb2179
fix: Conflict between Artifact Preview buttons (#2619)
camielvs Aug 13, 2026
900b99d
fix: Residual Hardcoded Text Colours (#2631)
camielvs Aug 14, 2026
6e294a7
docs: make Icon the canonical icon entrypoint (actions B17) (#2627)
camielvs Aug 17, 2026
4976b51
chore(gardening): adopt UI primitives + tone prop where the class del…
camielvs Aug 17, 2026
92894f8
fix: type Icon's name at the source instead of casting to any (#2636)
camielvs Aug 17, 2026
481f0eb
garden(refactor): weekly groundskeeping — 2026-W33 (#2622)
camielvs Aug 17, 2026
646211f
fix: correct generateDynamicNodeCallbacks return type (#2633)
camielvs Aug 17, 2026
861839c
fix(gardening): make the E8 self-review executable (#2637)
camielvs Aug 17, 2026
b500def
garden(dry): weekly groundskeeping — 2026-W33 (#2621)
camielvs Aug 17, 2026
8d32564
fix: repair `pnpm run test:coverage` by upgrading to vitest 4 (#2632)
camielvs Aug 17, 2026
af4cb50
chore(gardening): standing v1↔v2 KEEP for dry + lower comments thresh…
camielvs Aug 17, 2026
bec0136
garden(comments): weekly groundskeeping — 2026-W33 (#2620)
camielvs Aug 17, 2026
a6d3d3f
feat: Share Runs from Run List (#2643)
camielvs Aug 18, 2026
dd0bff1
fix(tailwind): load tailwind.config.js via @config (#2628)
camielvs Aug 19, 2026
6960c56
chore: Enforce Minimal Code Comments (#2630)
camielvs Aug 19, 2026
6980829
fix(errors): report SuspenseWrapper errors to Bugsnag + SecretsSettin…
camielvs Aug 19, 2026
252ec0c
fix: replace the dead `text-md` and `font-regular` typography classes…
camielvs Aug 19, 2026
8fc685a
refactor(ui): success tone + Heading props, and migrate the colour/he…
camielvs Aug 19, 2026
13edaf4
fix: Missing Hydration in Run View Subgraphs (#2645)
camielvs Aug 19, 2026
b915f22
feat: run comparison - pipeline diff engine (#2596)
camielvs Aug 19, 2026
adaf00b
feat: run comparison - merged graph & change summary logic (#2597)
camielvs Aug 19, 2026
a8ac9f2
feat: run comparison - shared diff UI primitives (#2598)
camielvs Aug 19, 2026
a2209cd
feat: run comparison - artifact comparison (#2599)
camielvs Aug 19, 2026
73d4751
feat: run comparison - run metadata comparison (#2600)
camielvs Aug 19, 2026
45dc3bc
feat: run comparison - structured diff view (#2601)
camielvs Aug 19, 2026
1a8ba00
chore: various fixes and improvements for v2 runs (#2605)
camielvs Aug 19, 2026
7dcb672
feat: run comparison - graph diff view (#2602)
camielvs Aug 19, 2026
a5d09d1
feat: run comparison - run picker & switcher (#2634)
camielvs Aug 19, 2026
f5008b0
fix(nodes): resolve readOnly precedence in the node factories (+4 tes…
camielvs Aug 19, 2026
ba92d0e
feat: run comparison - compare page, run selection & routing (#2603)
camielvs Aug 19, 2026
5053403
fix: preserve component editor state (#2648)
Mbeaulne Aug 20, 2026
e03c925
fix: Clicking an Input Label in Collapsed Mode opens Arguments Panel …
camielvs Aug 20, 2026
9b50a5c
fix: Misc Bugfixes (#2646)
camielvs Aug 20, 2026
d9ea313
feat: Pipeline editor - Conditional execution (#2574)
Ark-kun Aug 24, 2026
c81ecc9
feat: Conditional Execution - Option 1 (#2651)
camielvs Aug 24, 2026
936627b
feat: Finalize Conditional Execution (#2657)
camielvs Aug 24, 2026
a14041b
fix: Do not allow conditional execution on Subgraph Nodes + Validatio…
camielvs Aug 24, 2026
2c63e3a
chore: Update Docs Skill to Document Beta Flags with Default: True (#…
camielvs Aug 31, 2026
d7768e8
feat: URL Artifact Previews (#2682)
camielvs Sep 1, 2026
8019aff
chore(deps): bump js-yaml from 4.3.1 to 4.3.2 (#2697)
dependabot[bot] Sep 2, 2026
954dbd0
chore: Graduate Run Template Name Beta Flag (#2675)
camielvs Sep 3, 2026
1f6aee3
refactor(layout): centralise content-area height in contentHeight() (…
camielvs Sep 3, 2026
b94f2e1
fix: Artifact Preview Table Cell Value Rendering (#2700)
camielvs Sep 4, 2026
fa71f6c
fix: Pipeline Details Docked Window Too Small (#2676)
camielvs Sep 4, 2026
3d110c9
fix: Give AI full visibility into subgraphs (#2655)
camielvs Sep 4, 2026
ba9a830
refactor: Find pipeline entities inside nested subgraphs (#2685)
camielvs Sep 4, 2026
92abb15
fix: Make AI chat chips work for steps inside subgraphs (#2686)
camielvs Sep 4, 2026
6302808
refactor: Resolve AI mutation targets and explain refusals (#2687)
camielvs Sep 4, 2026
75909d6
fix: Apply AI edits in the subgraph the entity lives in (#2683)
camielvs Sep 4, 2026
c1cd8ab
feat: Let the AI add steps and ports inside a subgraph (#2684)
camielvs Sep 4, 2026
909ff49
feat(markdown): shared Markdown renderer (#2664)
camielvs Sep 4, 2026
284e759
feat(notices): validated contract for host-supplied notices (#2666)
camielvs Sep 4, 2026
01dfff4
feat(notices): host-driven notice banners on the dashboard home (#2667)
camielvs Sep 4, 2026
b33b73a
feat(notices): notices button in the header (#2668)
camielvs Sep 4, 2026
845ecdc
feat(notices): let a reader hide a banner without retiring it (#2681)
camielvs Sep 4, 2026
6f49038
chore: minor flags graduation (#2673)
camielvs Sep 4, 2026
e6d82f2
fix: missing subgraph contents lost when moved (#2703)
camielvs Sep 4, 2026
c75eec1
feat: Host-injected dashboard nav items, filtered by user permission …
camielvs Sep 4, 2026
52a0879
Add a new layout for banners (#2707)
Mbeaulne Sep 9, 2026
08b99b2
fix: avoid fetching unrelated component updates (#2716)
Mbeaulne Sep 15, 2026
1087df3
fix: Artifact Preview blocked by CORS (#2704)
camielvs Sep 17, 2026
70a0dfd
Removes refrence to graphite in our skills so agents know what to use…
Mbeaulne Sep 18, 2026
7816a18
chore: colocate log actions into log panel (#2753)
camielvs Sep 21, 2026
ff0b270
Drive the cloud provider dropdown from backend launcher config (#2694)
morgan-wowk Sep 22, 2026
fdd6454
Offer cluster aliases in the cloud provider picker (#2778)
morgan-wowk Sep 22, 2026
ac22ed3
fix: Copy + Paste Across Tabs (#2705)
camielvs Sep 22, 2026
08ceff2
feat: Give the AI access to sticky notes (#2766)
camielvs Sep 24, 2026
c63512d
feat: Let the AI see and arrange the canvas (#2767)
camielvs Sep 24, 2026
5d92b94
feat: Let the AI change an existing input or output (#2768)
camielvs Sep 24, 2026
cb2e718
feat: Give the AI the pipeline's notes, tags and run name template (#…
camielvs Sep 24, 2026
dd8a944
feat: Let the AI see and set task colours (#2770)
camielvs Sep 24, 2026
45dfb93
chore: api client for workspaces and projects (#2719)
maxy-shpfy Sep 24, 2026
71c0899
feat: workspaces and projects service (#2720)
maxy-shpfy Sep 24, 2026
86b594b
feat: tangent project view page (#2722)
maxy-shpfy Sep 25, 2026
3cda74a
feat: tangent - resources management in project view (#2723)
maxy-shpfy Sep 25, 2026
c840448
feat: tangent - dynamic workarea remote tools (#2724)
maxy-shpfy Sep 25, 2026
ea97329
feat: tangent - embedded pipeline editor (#2725)
maxy-shpfy Sep 25, 2026
2b85d6f
feat: tangent - embedded pipeline run view (#2726)
maxy-shpfy Sep 25, 2026
e445a4e
refactor: tangent - structured workarea target (#2727)
maxy-shpfy Sep 25, 2026
66e7c02
feat: tangent - remote agent for runview and editor (#2728)
maxy-shpfy Sep 25, 2026
a609e50
feat: tangent - keep track of open tabs while switching sessions insi…
maxy-shpfy Sep 25, 2026
6d0e231
refactor: tangent - migrate tangetprojectcontext onto mobx (#2730)
maxy-shpfy Sep 25, 2026
153d621
chore: save id stack to replay ids on reloads (#2731)
maxy-shpfy Sep 25, 2026
2a58e28
feat: tangent - interactive chips in tangent chat (#2732)
maxy-shpfy Sep 25, 2026
10e1bf5
feat: tangent - resource management via document entity (#2733)
maxy-shpfy Sep 25, 2026
3626f6a
chore: add autolayout tool (#2740)
maxy-shpfy Sep 25, 2026
f6da0ae
feat: tangent - debug in tangent sequence (#2741)
maxy-shpfy Sep 25, 2026
a400d74
fix: tangent - mint proper authorization with tangent (#2742)
maxy-shpfy Sep 25, 2026
a96709c
fix: tangent - remote agent send delta immediately (#2743)
maxy-shpfy Sep 25, 2026
c7d0bc9
fix: tangent - quick run button from mini content window (#2744)
maxy-shpfy Sep 25, 2026
13cf507
fix: tangent - proper debug sequence system prompt (#2757)
maxy-shpfy Sep 25, 2026
8e91886
chore: tangent - annotate runs submission to projectid (#2758)
maxy-shpfy Sep 25, 2026
7fe02df
feat: show run annotations (#2806)
camielvs Sep 25, 2026
960dfe4
feat: projects dashboard (#2734)
camielvs Sep 30, 2026
0ae3423
feat: create a project from a tile in the grid (#2735)
camielvs Sep 30, 2026
4acf377
feat: project page (#2738)
camielvs Sep 30, 2026
6264147
feat: add pipelines held in this browser to a project (#2745)
camielvs Sep 30, 2026
e87ebf5
feat: run a pipeline inside a project (#2754)
camielvs Sep 30, 2026
45ed271
feat: open a project where the work happens (#2759)
camielvs Sep 30, 2026
f0a6486
feat: say so when Tangent cannot be reached (#2760)
camielvs Sep 30, 2026
a2bae5e
fix: keep a long project name inside the tile it belongs to (#2761)
camielvs Sep 30, 2026
d88707a
feat: let the project page and Tangent reach each other (#2762)
camielvs Sep 30, 2026
adff32e
feat: open a new project ready to work in (#2763)
camielvs Sep 30, 2026
038988f
feat(projects): delete and share a project from either page (#2764)
camielvs Sep 30, 2026
322483e
refactor(projects): describe a project's resources one way (#2765)
camielvs Sep 30, 2026
b30da93
fix(tangent): project window parity — share, new-session links, agent…
camielvs Sep 30, 2026
9642623
feat(projects): show a project's documents on both pages (#2774)
camielvs Sep 30, 2026
f2895da
feat(tangent): list the pipelines the backend holds (#2775)
camielvs Sep 30, 2026
2dd0d09
feat(projects): make the agents' instructions a project document (#2776)
camielvs Sep 30, 2026
1f64c5a
fix(tangent): stop the tab strips scrolling up and down (#2777)
camielvs Sep 30, 2026
bdb0342
chore: increase max turns in remote agent (#2779)
maxy-shpfy Sep 30, 2026
c7c9a57
fix(agent): submit a spec that came from the editor's store (#2784)
camielvs Sep 30, 2026
90fcd3d
fix(projects): show an agent's run on the project it belongs to (#2785)
camielvs Sep 30, 2026
0cd740f
feat(tangent): show a project's runs on the tangent page (#2786)
camielvs Sep 30, 2026
f053046
feat(tangent): bring Tangent onto the dashboard (#2787)
camielvs Sep 30, 2026
2490244
feat(tangent): keep an agent's edits in frame on the canvas (#2789)
camielvs Sep 30, 2026
b83d588
feat(projects): fix cancelling, track shared projects, flag unreachab…
camielvs Sep 30, 2026
a59c677
feat(tangent): brief the agent on naming, and on the project its runs…
camielvs Sep 30, 2026
e8e3405
fix(runs): say why the backend refused a run instead of that it did (…
camielvs Sep 30, 2026
5ee5d66
fix(tangent): give the project page columns that scale both ways (#2798)
camielvs Sep 30, 2026
9401cea
fix(agent): stop the editor rebuilding the task it just added (#2803)
camielvs Sep 30, 2026
fb9a304
feat(agent): add a task by the id of the component search found (#2804)
camielvs Sep 30, 2026
b798e03
feat: correctly gate features behind Projects and Tangent flags (#2807)
camielvs Sep 30, 2026
63bf4dd
feat: pick a project from the editor and attribute runs to it (#2808)
camielvs Oct 1, 2026
ed232da
fix(agent): let the Tangent editor agent lay out the canvas (#2809)
camielvs Oct 1, 2026
c1a2d47
chore: clean up the code this stack added (#2810)
camielvs Oct 1, 2026
560e0cd
fix: give the agent log one session at a time (#2811)
camielvs Oct 1, 2026
e576275
feat(projects): track what the Tangent windows are used for (#2814)
camielvs Oct 1, 2026
7738f04
fix(projects): call the reworked projects API (#2815)
camielvs Oct 1, 2026
175faf5
feat(runs): tell a run's submitters apart at a glance (#2817)
camielvs Oct 1, 2026
a790369
fix: failure on spawning editor subagent (#2818)
maxy-shpfy Oct 1, 2026
1acf5c8
fix: tangent - stop reaching for localhost before the workspace loads…
camielvs Oct 1, 2026
4163635
fix(tangent): reopen the dock without a long drag, and close a delete…
camielvs Oct 1, 2026
5a3f383
fix: address the stack's review comments (#2824)
camielvs Oct 1, 2026
429043e
fix(tangent): address issues found testing the Tangent integration (#…
camielvs Oct 2, 2026
6ad0fe4
fix(tangent): undo a node move, lay out an unplaced run, share a proj…
camielvs Oct 7, 2026
67c3814
fix: stop the run view's Cmd+C from hijacking a text copy (#2845)
camielvs Oct 8, 2026
7973ab1
feat(logs): surface the system error message above the log viewers (#…
camielvs Oct 8, 2026
97b1707
feat(tangent): name a session by hand (#2860)
camielvs Oct 9, 2026
5998bc0
chore(deps-dev): bump typescript from 5.9.3 to 6.0.3 (#2103)
dependabot[bot] Oct 9, 2026
2ee47f5
chore(deps): bump pyodide from 0.29.4 to 314.0.7 (#2692)
dependabot[bot] Oct 9, 2026
acc0ae0
chore(deps): bump the npm-minor-patch group across 1 directory with 6…
dependabot[bot] Oct 9, 2026
e5e18a9
chore(deps): bump the npm-minor-patch group with 21 updates (#2867)
dependabot[bot] Oct 9, 2026
f1b4147
chore(deps): bump nanoid from 5.1.16 to 6.0.1 (#2688)
dependabot[bot] Oct 9, 2026
7db666d
ci: run CI on Node 22 (#2866)
camielvs Oct 13, 2026
37b2ac0
chore(deps): bump nanoid from 6.0.1 to 6.0.2 (#2873)
dependabot[bot] Oct 13, 2026
dfb0c3d
chore(deps-dev): bump jsdom from 29.1.1 to 30.1.2 (#2869)
dependabot[bot] Oct 13, 2026
b38e174
chore(deps-dev): bump @vitejs/plugin-react from 5.2.0 to 6.1.2 (#2714)
dependabot[bot] Oct 13, 2026
5644002
chore(deps): bump js-yaml from 4.3.2 to 5.4.2 (#2871)
dependabot[bot] Oct 13, 2026
feab771
chore(deps): bump mobx-keystone from 1.23.0 to 2.3.1 (#2872)
dependabot[bot] Oct 13, 2026
8c2b254
chore(deps): bump @bugsnag/plugin-react from 8.9.0 to 9.0.0 (#2870)
dependabot[bot] Oct 13, 2026
69f21fd
chore(deps): bump @bugsnag/js from 8.10.0 to 9.0.0 (#2868)
dependabot[bot] Oct 13, 2026
c1877cd
chore(deps): bump the npm-minor-patch group across 1 directory with 3…
dependabot[bot] Oct 14, 2026
790723e
Add a toggle between personal API keys and the backend AI proxy (#2800)
Mbeaulne Oct 15, 2026
e918f3f
Add a shared AI model and thinking picker (#2801)
Mbeaulne Oct 15, 2026
70834e1
Centralize AI model configuration (#2847)
Mbeaulne Oct 15, 2026
9011923
Add native Claude support to AI features (#2846)
Mbeaulne Oct 15, 2026
ea900e8
Default AI to the backend proxy and unify model selection (#2878)
Mbeaulne Oct 15, 2026
7494e53
chore(deps): bump the npm-minor-patch group with 4 updates (#2890)
dependabot[bot] Oct 15, 2026
d97c32a
ci(dependabot): hold eslint and @eslint/js majors until ESLint 10 is …
camielvs Oct 15, 2026
2385447
chore(deps-dev): bump @eslint/js (#2891)
dependabot[bot] Oct 15, 2026
ebd29ec
feat(launcher): show a target's standing prerequisite with the picker…
camielvs Oct 15, 2026
9f9f42b
feat(tangent): cmd/ctrl-click a run to open the run page in a new tab…
camielvs Oct 16, 2026
7ef982f
refactor: check every new-tab click with hasNewTabModifier (#2892)
camielvs Oct 16, 2026
23d55b5
chore(deps): bump the npm-minor-patch group with 5 updates (#2905)
dependabot[bot] Oct 16, 2026
355decb
chore(deps): bump js-yaml from 5.4.3 to 5.5.0 (#2906)
dependabot[bot] Oct 16, 2026
08f6500
chore(github): ask PRs for a line breakdown by category (#2908)
camielvs Oct 16, 2026
300a60c
chore(deps): bump the npm-minor-patch group with 7 updates (#2910)
dependabot[bot] Oct 19, 2026
f5748c1
chore(deps): bump the npm-minor-patch group with 2 updates (#2917)
dependabot[bot] Oct 20, 2026
79c7ba4
feat(projects): choose a workspace when creating a project (#2881)
camielvs Oct 20, 2026
47dd292
refactor(projects): share the workspace select outside the dashboard …
camielvs Oct 20, 2026
e8a5123
refactor(run-view): split Debug in Tangent into a reusable run handof…
camielvs Oct 20, 2026
30480c4
feat(tangent): let a link open a view on arrival (#2896)
camielvs Oct 20, 2026
ff4e89e
feat(run-view): ask where to debug a run that has no project (#2897)
camielvs Oct 20, 2026
cc2c34c
feat(run-view): open a run in Tangent with an empty session (#2898)
camielvs Oct 20, 2026
4867bf2
chore(deps): bump the npm-minor-patch group with 9 updates (#2922)
dependabot[bot] Oct 21, 2026
6693641
Show the cluster a task ran on in Execution Details (#2921)
morgan-wowk Oct 21, 2026
1a6c125
feat: seed project with a global configuration for tangle deploy (#2829)
maxy-shpfy Oct 22, 2026
84081c2
feat(routing): serve the v2 editor and run view on the default paths …
camielvs Oct 22, 2026
163a44f
fix(projects): say why the backend refused to create a project (#2909)
camielvs Oct 22, 2026
181b7d2
fix(projects): forget a starting prompt nobody arrived for within the…
camielvs Oct 22, 2026
8e0465c
chore(skills): always offer an "all" option when picking comments (#2…
camielvs Oct 22, 2026
eb5af82
chore(deps-dev): bump @babel/plugin-proposal-decorators (#2933)
dependabot[bot] Oct 22, 2026
240c8e3
chore(deps-dev): bump @babel/core from 7.29.7 to 8.0.7 (#2936)
dependabot[bot] Oct 22, 2026
8049dc1
chore(deps-dev): bump @vitest/coverage-v8 from 4.1.10 to 5.0.5 (#2938)
dependabot[bot] Oct 22, 2026
88e199b
chore(deps): bump lucide-react (#2931)
dependabot[bot] Oct 22, 2026
89ee5c8
Add local and remote tabs to dashboard pipelines (#2849)
Mbeaulne Oct 23, 2026
04b70ad
Restack #2850 onto updated MB/dashboard-pipeline-tabs (#2850)
Mbeaulne Oct 23, 2026
1bdc6ee
Restack #2852 onto updated MB/remote-pipeline-table (#2852)
Mbeaulne Oct 23, 2026
0971f17
Restack #2853 onto updated MB/remote-pipeline-search (#2853)
Mbeaulne Oct 23, 2026
32db6ff
Restack #2854 onto updated MB/remote-pipeline-table-layout (#2854)
Mbeaulne Oct 23, 2026
38eed6c
Restack #2858 onto updated MB/remote-pipeline-column-resizing (#2858)
Mbeaulne Oct 23, 2026
b1f8826
Restack #2861 onto updated MB/remote-pipeline-pagination (#2861)
Mbeaulne Oct 23, 2026
43af7fd
Restack #2874 onto updated MB/remote-pipeline-pagination-links (#2874)
Mbeaulne Oct 23, 2026
0e06eb9
Restack #2876 onto updated MB/remote-pipeline-search-ui (#2876)
Mbeaulne Oct 23, 2026
bb6be90
Restack #2877 onto updated MB/remote-pipeline-filter-requests (#2877)
Mbeaulne Oct 23, 2026
5db0a11
Restack #2882 onto updated MB/remote-pipeline-search-links (#2882)
Mbeaulne Oct 23, 2026
6d8c78f
Restack #2883 onto updated MB/pipeline-tabs-layout (#2883)
Mbeaulne Oct 23, 2026
2846244
View remote pipelines in the editor with clear load errors (#2884)
Mbeaulne Oct 23, 2026
8ed57d7
Edit and autosave remote pipelines in V2 (#2885)
Mbeaulne Oct 23, 2026
3306bc3
Enable local undo and redo for remote pipelines (#2888)
Mbeaulne Oct 23, 2026
34376fc
Add local pipeline migration to remote storage (#2889)
Mbeaulne Oct 23, 2026
6fb12a9
Preserve pipeline favorites and history after remote upload (#2900)
Mbeaulne Oct 23, 2026
894731e
Create pipelines remotely by default using unsaved drafts (#2901)
Mbeaulne Oct 23, 2026
c311f69
Migrate local pipelines to remote storage when opened (#2902)
Mbeaulne Oct 23, 2026
865355d
Complete shared pipeline creation and remote rename storage (#2904)
Mbeaulne Oct 23, 2026
d1ca17a
Add favorite and delete actions to remote pipeline rows (#2915)
Mbeaulne Oct 23, 2026
1e35f6d
Add deep links to remote pipeline nodes and subgraphs (#2916)
Mbeaulne Oct 23, 2026
ecae9ac
Make remote pipelines opt-in with save recovery and view-only actions…
Mbeaulne Oct 23, 2026
2597613
Validate component drops and warn before deleting empty pipelines (#2…
Mbeaulne Oct 23, 2026
9b661bd
chore(deps): bump the npm-minor-patch group with 6 updates (#2947)
dependabot[bot] Oct 23, 2026
5385b41
feat(runs): show backend-provided links in Execution Details (#2946)
camielvs Oct 24, 2026
0a493f5
chore(deps): bump the npm-minor-patch group with 5 updates (#2951)
dependabot[bot] Oct 26, 2026
b896762
fix(tangent): identify the user to a cross-origin Tangent embed (#2950)
camielvs Oct 26, 2026
7230bfd
feat(runs): show a secret input as its secret in a task's artifacts (…
camielvs Oct 27, 2026
8094d99
Track project detail page impressions (#2953)
Mbeaulne Oct 27, 2026
befb7fc
chore(deps): bump @dagrejs/dagre (#2957)
dependabot[bot] Oct 27, 2026
794a488
feat(run-view): show the run's status in the tab favicon (#2962)
camielvs Oct 28, 2026
22f0f79
chore(deps): bump the npm-minor-patch group with 6 updates (#2964)
dependabot[bot] Oct 28, 2026
c141642
Reuse the shared model picker and add GPT-6.1 models (#2959)
Mbeaulne Oct 29, 2026
5b898a4
chore(deps): bump the npm-minor-patch group with 2 updates (#2968)
dependabot[bot] Oct 29, 2026
1afbd12
feat: vs code extension for local agents support (#2911)
maxy-shpfy Oct 30, 2026
7c83f14
feat: integrate vs code into tangent project page (#2912)
maxy-shpfy Oct 30, 2026
4adc771
chore: describe browser remote env properly for tangent (#2913)
maxy-shpfy Oct 30, 2026
dbc4152
feat: tangent browser agent support session resources (#2919)
maxy-shpfy Oct 30, 2026
48d3151
chore(deps): bump fast-uri from 3.1.8 to 3.1.9 (#2969)
dependabot[bot] Oct 30, 2026
0b86178
fix(editor): keep the arguments dialog usable from the docked Quick R…
camielvs Oct 30, 2026
e293b64
fix(projects): show a renamed backend pipeline's current name (#2966)
camielvs Oct 30, 2026
95b7aed
Post review findings as one review, gated by an "All" choice (#2961)
camielvs Oct 30, 2026
3cec55f
feat: use pi-memory in projects
maxy-shpfy Oct 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
136 changes: 136 additions & 0 deletions .claude/skills/accessibility/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
---
name: accessibility
description: Accessibility patterns and requirements for this project. Use when creating interactive components, forms, dialogs, or any user-facing UI.
---

# Accessibility Patterns

This project builds on **shadcn/ui** primitives which provide strong built-in a11y. Follow these patterns to maintain that standard.

## ARIA Labels

All interactive elements without visible text must have an `aria-label`:

```typescript
<Button variant="ghost" aria-label="Home">
<Icon name="Home" />
</Button>

<div role="button" aria-expanded={isOpen} aria-label={`Folder: ${folder.name}`}>
```

## Form Accessibility

Link inputs to labels and error messages:

```typescript
<Input
id={id}
aria-invalid={!!error}
aria-describedby={`${id}-hint`}
/>
{!!error && <Text tone="critical">{error.join("\n")}</Text>}
<div id={`${id}-hint`}>{hint}</div>
```

Use the shadcn/ui `Label` component for proper form associations.

## Keyboard Navigation

### Required keyboard support for custom interactive elements:

- **Enter/Space**: Activate buttons and toggles
- **Escape**: Close dialogs, cancel editing, deselect
- **Tab**: Move focus between interactive elements

The `Input` component has built-in `onEnter` and `onEscape` props:

```typescript
<Input onEnter={save} onEscape={cancel} />
```

Everything else handles the keys itself:

```typescript
onKeyDown={(e) => {
if (e.key === "Enter" && !e.shiftKey) {
e.preventDefault();
save();
} else if (e.key === "Escape") {
e.preventDefault();
cancel();
}
}
```

### Non-button clickable elements need `role="button"` and `tabIndex={0}`:

```typescript
<div role="button" tabIndex={0} title="Click to edit">
{content}
</div>
```

### Dialogs must prevent keyboard shortcuts from leaking to the canvas:

The dialog component already handles this — use `preventKeyboardPropagation` prop when needed. This stops Ctrl+A, Ctrl+C, Ctrl+V, Tab, Enter, and Escape from reaching React Flow.

## Screen Reader Support

Use `sr-only` class for visually hidden but screen-reader-accessible text:

```typescript
<DialogClose>
<Cross2Icon />
<span className="sr-only">Close</span>
</DialogClose>

<DialogHeader className="sr-only">
<DialogTitle>{title}</DialogTitle>
<DialogDescription>{description}</DialogDescription>
</DialogHeader>
```

## Semantic HTML

Use proper semantic elements and ARIA roles:

- Navigation — `<nav aria-label="breadcrumb">`
- The current page in a breadcrumb — `<span role="link" aria-disabled="true" aria-current="page">`
- Decorative separators — `<li role="presentation" aria-hidden="true">`
- Alerts — `<div role="alert">`

## Focus Styling

All focusable elements must use the project's focus-visible ring pattern:

```
focus-visible:ring-ring/50 focus-visible:ring-[3px] focus-visible:border-ring
```

Do not remove `outline-none` without replacing it with a visible focus indicator.

## UI Primitives A11y

The project's primitives already accept `AriaAttributes`:

- `BlockStack` and `InlineStack` accept all ARIA props
- `Text` accepts `role` and ARIA props
- `Button` has built-in focus-visible and disabled states
- `Input` supports `aria-invalid`, `onEnter`, `onEscape`
- All shadcn/ui components (Dialog, Select, Checkbox, Switch, Tabs) handle focus trapping and keyboard navigation automatically

## React Flow Considerations

The pipeline editor has specific a11y needs:

- **Handles**: Support click selection and Escape to deselect
- **Task nodes**: Labels are interactive with visual feedback
- **Folders in sidebar**: Use `role="button"` with `aria-expanded`
- **Canvas keyboard shortcuts**: Must not interfere with dialog/modal focus

When adding new interactive elements to the flow canvas, ensure they:

1. Are keyboard accessible
2. Have appropriate ARIA labels
3. Don't capture keyboard events that should reach parent containers
162 changes: 162 additions & 0 deletions .claude/skills/address-pr-comments/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
---
name: address-pr-comments
description: Find the PR for the current branch, read review comments, and address them — either by fixing the code or pushing back with a reply. Use when the user wants to handle PR feedback.
disable-model-invocation: true
allowed-tools: Bash(gh *), Bash(git *), Read, Edit, Write, Grep, Glob, Agent
---

# Address PR Comments

Check the current branch for an open PR, read all unresolved review comments, and let the user pick which ones to address.

## Step 1: Find the PR

```bash
gh pr view --json number,title,url,state --jq '{number, title, url, state}'
```

If no PR exists for the current branch, tell the user and stop.

Also determine the current GitHub user:

```bash
gh api user --jq '.login'
```

## Step 2: Fetch review comments

Get all review comments (not general PR comments):

```bash
gh api repos/{owner}/{repo}/pulls/{pr_number}/comments --paginate --jq '.[] | {id, path, line, body, user: .user.login, created_at, in_reply_to_id, diff_hunk}'
```

## Step 3: Filter to actionable comments

Build a thread map by grouping comments using `in_reply_to_id`. For each top-level comment thread:

**Skip the thread if ANY of these are true:**

- The thread is already resolved
- The top-level comment was made by the current user
- The top-level comment was made by a bot (dependabot, github-actions, etc.)
- The comment is a pure approval with no actionable feedback
- **The current user (or PR author) has already replied** in the thread — this means it was already addressed in a previous run or manually. Check if any reply in the thread was authored by the current GitHub user.

This ensures running the command again won't double-reply to already-addressed comments.

## Step 4: Analyze comments and present for selection

Before presenting comments to the user, **read the relevant code and think critically about each comment**. Determine whether the suggestion is correct, already addressed, or a bad idea. Form a proposed action for each.

Use the AskUserQuestion tool to show a **multi-select list** of all remaining unresolved, unaddressed comments.

**Always make "All comments" the first option of the first question**, with the total count (e.g. `All comments (8)`). Selecting it addresses every comment with its proposed action, whatever else is selected. `AskUserQuestion` allows at most 4 options per question and 4 questions, so when the comments don't fit in the remaining slots, group related ones into a single option (by file or shared concern) rather than leaving any out.

Each comment option should show:

- The reviewer's username
- The file path and line number
- A truncated preview of the comment (first ~80 characters)
- **Your proposed action** — what you plan to do (e.g., "Will fix: change X to Y", "Will push back: current approach is better because...", "Will answer: explain how X works")

Example options:

- `All comments (8)` → address every comment above with its proposed action
- `[reviewer] file.ts:42 — "Fix this typo..." → Will fix: rename varName to variableName`
- `[reviewer] other.ts:10 — "This should use..." → Will push back: current pattern is more performant here`
- `[reviewer] types.ts:5 — "Why not use...?" → Will answer: explain the tradeoff`

The user picks which comments they want to address. If "All comments" is selected, address every comment; otherwise proceed only with the selected ones.

If there are no actionable comments, tell the user everything has been addressed and stop.

## Step 5: Address each selected comment

**Do not blindly agree with every comment.** Critically evaluate each suggestion against the codebase, existing patterns, and correctness. If a suggestion would make the code worse, introduce inconsistency, or is factually wrong — push back respectfully. The reviewer is a collaborator, not an authority to obey unconditionally.

For each selected comment, read the relevant file and surrounding context, then decide:

Every reply **must** be prefixed with the AI disclaimer:

```markdown
> 🤖 This is an AI-generated response.

<rest of the reply body>
```

### If the suggestion is correct and actionable:

1. Make the code change
2. Reply to the comment confirming the fix:

```markdown
> 🤖 This is an AI-generated response.

Fixed — <brief description of what was changed>.
```

### If the suggestion is already addressed:

Reply explaining that it's already handled:

```markdown
> 🤖 This is an AI-generated response.

This is already handled — <explanation with file path/line reference>.
```

### If the suggestion is incorrect or not applicable:

Reply respectfully pushing back:

```markdown
> 🤖 This is an AI-generated response.

I think the current approach is better here because <reasoning>. <Optional: offer an alternative compromise>.
```

### If the comment is a question (not a change request):

Reply with the answer:

```markdown
> 🤖 This is an AI-generated response.

<Answer the question with relevant context/file references>.
```

## Step 6: Post replies

For each comment, post the reply:

```bash
gh api repos/{owner}/{repo}/pulls/{pr_number}/comments/{comment_id}/replies -f body="<reply>"
```

## Step 7: Stage and commit fixes

If any code changes were made:

1. Stage only the files that were modified to address comments
2. Create a commit with a message like: `address pr feedback`
3. Do NOT push — tell the user the changes are committed and ready to push

## Step 8: Show summary

After all comments are addressed, show a summary table with columns:

| # | File | Comment | Action |
| --- | ---- | ------- | ------ |

Where **Action** clearly states what was done: "Fixed — ...", "Pushed back — ...", "Answered — ...", or "Already handled — ...".

## Important

- Always read the full file context before deciding how to address a comment
- **Think critically** — do not default to agreeing. Push back when the suggestion is wrong, harmful, or inconsistent with the codebase
- Never dismiss feedback rudely — be respectful even when pushing back
- If a comment requires a large refactor or is out of scope, say so and suggest a follow-up issue
- Group related comments that touch the same code — address them together
- If unsure about a comment's intent, ask the user before responding
- Show the user what you plan to reply before posting, so they can adjust
Loading